2012-11-20 22 views
4

我注意到,有時在viewDidLoad我得到了正確的視圖大小。有時候我沒有。我應該初始化我viewController on viewDidLoad或viewWillLayoutSubviews

例如

- (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中?

回答

9

viewDidLoad是創建和初始化您希望添加到主視圖中的子視圖的好地方。這也是進一步定製您的主視圖的好地方。這也是一個初始化數據結構的好地方,因爲在調用這個視圖控制器時,應該已經在視圖控制器上設置了任何屬性。這通常只需要一次

viewWillLayoutSubviews是您如果需要定位和佈置子視圖的位置。這將在旋轉或其他事件導致視圖控制器的視圖大小後調用。在視圖控制器的生命週期中,這可能發生多次次。你只應該在這裏佈置視圖。

+0

完美。這也是一個確保我們的觀點符合超級觀點的好地方(如果有包裝) –

+0

「你應該只在這裏佈置觀點。」 「僅」,你的意思是不要在這裏創建視圖? – Honey

+1

@Honey不要在'viewWillLayoutSubviews'中創建視圖。 – rmaddy

相關問題