2017-06-01 111 views
0

我需要一些幫助來了解viewDidLAyoutSubviews方法以及如何安全地使用它。在viewDidLayoutSubviews之後調用一次方法

我需要在viewDidAppear方法之前以編程方式編輯我的一些子視圖。爲了使它正常工作,我當然需要等到目標子視圖放好後再編輯它們。

現在我認爲這是viewDidLayoutSubviews方法的用處,但是當我測試它時,我發現它實際上在我的viewDidAppear方法之前調用了兩次。我試圖編輯我的子視圖只有第一次viewDidLayoutSubviews被稱爲,因爲我只想運行[self editMySubviews]一次,但是然後目標子視圖沒有準備好,它搞砸了。這是我嘗試:

- (void)viewDidLayoutSubviews { 
    if (!myBoolean) { 
     [self editMySubviews]; 
     myBoolean = YES; 
    } 
} 

當然,如果我刪除它自我修復下一次調用該方法的if-statement,但我只想[self editMySubviews]被調用一次。

所以我的問題是,當我可以在viewDidAppear方法之前調用[self editMySubviews]方法,並且100%確定所有子視圖都可以編輯?現在在我的情況下,viewDidLayoutSubviewsviewDidAppear之前被調用兩次,但每次都會這樣嗎?在第二次調用viewDidLayputSubviews之後撥打[self editMySubviews]是否安全?

+0

你在做什麼'editMySubviews'? – dan

+0

根據其在不同設備上不同的superView.frame.size.width編輯一些按鈕約束 – Peter

+0

那麼爲什麼你只需要做一次?每當子視圖佈局考慮超視圖尺寸變化時,您都應該這樣做。 – dan

回答

0

根據你的評論,根據其superView.frame.size.width這是不同的在不同的設備

viewDidLoad中後,你會得到view.bounds適當的大小表示

編輯一些按鈕限制 所以你可以很容易地設置/更新約束和添加在這個
setNeedsUpdateConstraints和layoutIfNeeded方法調用

相關問題