`
mikixiyou
  • 浏览: 1098952 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353144
社区版块
存档分类
最新评论

在storyboard中view的frame值为0

    博客分类:
  • iOS
阅读更多

XCode4.5中,使用storyboard创建一个UIScrollView对象,在viewDidLoad:方法中得到它的frame的值都是0,但是我在storyboard都设置了UIScrollView对象的frame属性值的。

我的目的是使用UIScrollViewUIPageController实现翻页,在viewDidLoad:方法中创建新增的页面,而页面的体积是根据scrollviewframesize来获取。现在size0了,新建的页面对象也就跟着为0了。在运行时不显示出来,也就没办法翻页。

一开始我并不知道这是scrollviewframe的问题,debug后发现问题。

因此,我做了一个简单的测试。

我再创建一个基于storyboard的简单视图项目,然后拖一个UIView对象进来,设置它的背景色为绿色,frame也设置一个合适的大小,反正不是(0000)。(注意,我没有使用UIScrollView,而是使用UIView,测试性质是一样的)然后,在storyboard中按住control键,点击UIView对象,拖到ViewController.h中,设置outlet,命名为firstViewFirstSubView

 

我在ViewController.m中重写 viewDidLoad:方法,原来就是在此方法中新建的翻页页面视图对象。

 

- (void)viewDidLoad:(BOOL)animated

{

    [super viewDidLoad:animated];

 

    NSLog(@"View Controller Did Load. firstViewFirstSubView: %@ ", firstViewFirstSubView);

    NSLog(@"subView's dimmensions: %f by %f at %f, %f", firstViewFirstSubView.frame.size.width,

      firstViewFirstSubView.frame.size.height,

      firstViewFirstSubView.frame.origin.x,

      firstViewFirstSubView.frame.origin.y);

}

 

测试结果不出所料,该uiview.frame的所有的值都是0.

 

2012-11-15 15:21:00.743 StoryboardViewBounds[11132:c07] View Controller Did Load. firstViewFirstSubView: <UIView: 0x9379730; frame = (0 0; 0 0); autoresize = TM+BM; layer = <CALayer: 0x9378e40>>

2012-11-15 15:21:00.744 StoryboardViewBounds[11132:c07] subView's dimmensions: 0.000000 by 0.000000 at 0.000000, 0.000000

 

视图控制器类一共有四个方法可以重写来实现视图加载和展现,分别是ViewWillAppear:viewDidAppear:viewDidLoad:viewDidLayoutSubviews。其中viewDidLayoutSubviews方法是在iOS5.0系统中才开始提供的。

 

ViewWillAppear:方法,该uiview.frame的所有的值还是0.

 

但在viewDidAppear:viewDidLayoutSubviews中,得到的frame的值就是storyboard中设置的值了。

 

这是为什么呢?需要了解一下视图控制器的工作原理了。

 

视图在视图控制器的生命周期中加载和展现流程如下图所示:

 

 

 

viewDidLoad之前,视图控制器的作为viewoutlet不和storyboard连接,直到viewWillAppear时,view的体积才被设置。

这个view的所有维度在layoutSubviews时会被计算和设置,但layoutSubviews是发生在viewWillAppear

因此,在layoutSubviews之后,才能得到这个view设置在storyboard中的所有维度值。

 

  • 大小: 46.1 KB
分享到:
评论

相关推荐

    点击改变frame

    1. **创建按钮**:在storyboard或代码中创建UIButton,并设置其标题和初始frame。 2. **添加事件处理程序**:为按钮添加`UIControlEventTouchUpInside`事件的target-action。在Swift中,这可以通过`addTarget(_:...

    IOS 使用XIB 自定义View

    通过实例化`CustomView`类,或者在Storyboard中选择`CustomView`作为View的Class,然后配置所需的属性。 **注意事项** 1. 在XIB文件中,确保正确设置了自定义视图的类名,以便于加载时能正确关联。 2. 调整约束以...

    iOS中的View Controller Lifecycle

    在给定的"Storyboard_unwindDemo"示例中,我们可能看到如何使用Storyboard中的“UnwindSegue”来处理导航回上一级视图的流程。UnwindSegue是一种便捷的方式,通过连接一个退出动作到初始View Controller,从而在用户...

    swift-开启Debug模式实时标记拦截事件的view并输出该view的信息和所在控制器的信息

    一种方法是在storyboard或XIB文件中,将视图的Class设置为`DDDebugView`。另一种方法是在代码中动态创建视图时,指定类型为`DDDebugView`。 例如,在代码中创建`UILabel`时: ```swift let label = UILabel(frame:...

    iPhone开发【六】常用控件之Picker View

    在Storyboard中,可以通过拖拽Object库中的Picker View 到ViewController的视图上实现。在代码中,你可以使用如下的Swift语法创建Picker View: ```swift let pickerView = UIPickerView(frame: CGRect(x: 0, y: 0,...

    ios源码之相框PhotoFrame.rar

    在PhotoFrame中,可能使用了Auto Layout来确保相框适应各种设备的屏幕尺寸,无论是在iPhone还是iPad上都能得到良好的显示效果。 5. **Storyboard与XIB文件** 故事板(Storyboard)和XIB文件是iOS界面设计的主要...

    IOS应用源码——PhotoFrame.rar

    主界面的实现可能在ViewController类中,通过Storyboard或代码布局来设计UI。如果应用支持多语言,还会看到Localizable.strings文件,用于存储不同语言的文本资源。 此外,"PhotoFrame"可能包含了一系列自定义的UI...

    一像素分割线

    在Storyboard中,选择一个UIView并将其Class更改为自定义的OnePixelSeparatorView。这样,当界面加载时,它会自动调整宽度以适应不同屏幕的像素密度。 总的来说,“一像素分割线”的实现涉及到Storyboard中的视图...

    PullOverView:在地图上拉起视图。 我已经使用Storyboard为iPhone 5s创建了这个库。 现在,您可以将此PullOverView用作android提供

    我已经使用Storyboard为iPhone 5s创建了这个库。 现在,您可以将此PullOverView用作android提供。 (void)viewDidLoad {[super viewDidLoad]; CGFloat xOffset = 0; pullUpView = [[StyledPullableView alloc] ...

    swift-KNWaveView水波纹View简单创建方式

    let waveView = KNWaveView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)) view.addSubview(waveView) ``` 4. **配置参数**: KNWaveView提供了一些属性来定制水波纹的效果,...

    table view 使用

    本示例"table view使用"是一个简单的UITableView的使用教程,通过它我们可以学习如何在应用中有效地运用UITableView。 首先,我们要创建一个UITableView的实例。在Swift中,我们通常在UIViewController的子类中实现...

    IOS应用源码之位于顶部的黑酷tab view视图demo .rar

    在Storyboard中,开发者可能使用Segues来连接Tab Bar Controller和对应的View Controllers,实现页面间的跳转。同时,可能还包含了Navigation Controller,用于在各个视图间提供堆栈式导航。 6. **自定义动画**: ...

    swift-XBGradientColorView渐变色view

    let gradientView = XBGradientColorView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 50)) gradientView.gradientColors = [.red, .orange, .yellow, .green] gradientView.gradientDirection = ...

    第五节 编程定制UIViewController.docx

    在`viewDidLoad`中动态创建一个`UIButtonTypeInfoLight`类型的按钮,并设置其frame,然后添加为`self.view`的子视图: ```objc - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = ...

    swift-自定义下拉菜单创建下拉菜单对象即刻使用

    popoverVC.view.frame = CGRect(x: 0, y: sender.frame.maxY, width: view.bounds.width, height: 200) // 设置popover的初始位置和大小 present(popoverVC, animated: true, completion: nil) } } ``` 为了实现...

    半透明ViewController

    在iOS开发中,半透明(或称为玻璃效果)的ViewController是一种常见的设计手法,它能够为用户界面增添一种轻盈、通透的视觉感受。这种效果通常通过调整ViewController的背景或者子视图的透明度来实现,同时还可以...

    (Swift5.2)ScrollerView实现图片全屏滚动

    1. **设置UIScrollView**:首先,在Storyboard或代码中创建一个UIScrollView,并确保其填充了父视图的整个空间。在Swift中,可以通过AutoLayout设置约束,使ScrollView的四边与父视图对齐。 ```swift scrollView....

    View显示进度

    在iOS开发中,"View显示进度"通常是指在用户界面(UI)中展示加载或处理进度的功能。这种功能可以通过各种类型的进度条控件实现,比如`UIProgressView`、自定义视图或者动画效果。本篇文章将深入探讨如何在iOS应用中...

    NoStoryboard:没有 Storyboard 的 iOS 应用程序的快速设置

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, 30)]; label.text = @"欢迎来到无Storyboard应用"; [self.view addSubview:label]; } @end ``` ### 配置Info...

    利用frame实现屏幕的适配

    6. **Storyboard与Size Inspector**:在Interface Builder中,可以使用Size Inspector来为不同Size Classes设置不同的约束,或者直接调整视图的frame,以适应各种屏幕。 7. **响应式设计**:为了使应用更具可扩展性...

Global site tag (gtag.js) - Google Analytics