欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在storyboard中view的frame值为0

程序员文章站 2022-05-06 15:09:48
...

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中设置的值了。

 

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

 

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

 在storyboard中view的frame值为0
            
    
    博客分类: iOS iosstoryboarduiscrolllviewframe

 

 

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

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

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

 

  • 在storyboard中view的frame值为0
            
    
    博客分类: iOS iosstoryboarduiscrolllviewframe
  • 大小: 46.1 KB