iOS Autolayout情況下,ViewController嵌套時,childViewController的Frame異常問題
最近項目中,使用Storyboard、AutoLayout開發,某個ViewController中嵌套了多個子ViewController,結果在將其添加到父ViewController時,出現座標異常問題;追蹤代碼發現,這是由於AutoLayout狀態下,擷取Frame資料不準確(或時機不對)導致的,網上找了許久,取長補短,搞到瞭解決辦法,具體如下:
分析:
AutoLayout狀態下,執行完viewDidLoad、viewWillAppear等方法後,還會執行viewDidLayoutSubviews方法,而解決問題的關鍵就在這兒。
在這個方法中,我們可以重新對某個子View,甚至某個ChildViewController的View進行Frame調整。
範例程式碼如下:
- (void)viewDidLayoutSubviews{ [super viewDidLayoutSubviews]; self.contentScrollView.contentSize = CGSizeMake(CGRectGetWidth(self.contentScrollView.frame) * 3, CGRectGetHeight(self.contentScrollView.frame)); if (IOS8) { CGFloat subView_W = CGRectGetWidth(self.contentScrollView.frame); for (int i = 0; i < 3; i++) { UIView *subView = [self.view viewWithTag:SubVC_ViewTag + i]; CGRect subViewFrame = subView.frame; subViewFrame.origin.x = subView_W * i; subView.frame = subViewFrame; } }
//iOS7必須執行 [self.view layoutSubviews];}
注意:這個方法中,若是iOS7,則必須執行
[self.view layoutSubviews];