最近項目中,使用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];