我应该在viewDidLoad或viewWillLayoutSubviews上初始化我的viewController

时间:2012-11-20 03:32:02

标签: objective-c xcode4.5

我注意到有时在viewDidLoad上我的视图大小合适。有时候我没有。

例如

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.pullToRefreshController = [self.pullToRefreshController initWithDelegate:self];
    PO(self.view);
    PO(self.view.superview);
    PO(self.view.superview.superview);
    PO(self.view.superview.superview.superview);

    while(false);
}
-(void)viewWillLayoutSubviews
{
    PO(self.view);
    PO(self.view.superview);
    PO(self.view.superview.superview);
    PO(self.view.superview.superview.superview);
    while (false);
}

在viewDidLoad中,self.view的大小仍为320到480.在已修复的viewWillLayoutSubviews中。

我想知道两者之间会发生什么,我应该在哪里初始化东西?或者viewDidLoad中的内容应该是什么以及viewWillLayoutSubviews中应包含哪些内容?

1 个答案:

答案 0 :(得分:9)

viewDidLoad是创建和初始化您希望添加到主视图的子视图的好地方。它也是进一步定制主视图的好地方。它也是初始化数据结构的好地方,因为在调用它时应该在视图控制器上设置任何属性。这通常只需要一次

viewWillLayoutSubviews是您根据需要定位和布置子视图的位置。这将在旋转或其他事件导致视图控制器的视图大小调整后调用。在视图控制器的生命周期中,这可能会发生很多次。你应该只在这里布局视图。