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