近期項目中,使用Storyboard、AutoLayout開發,某個ViewController中嵌套了多個子ViewController,結果在將其加入到父ViewController時,出現座標異常問題。追蹤代碼發現,這是由於AutoLayout狀態下,獲取Frame數據不許確(或時機不正確)致使的,網上找了許久,取長補短,搞到了解決的方法,詳細例如如下:post
分析:code
AutoLayout狀態下。運行完viewDidLoad、viewWillAppear等方法後,還會運行viewDidLayoutSubviews方法,而解決這個問題的關鍵就在這兒。blog
在這種方法中,咱們可以又一次對某個子View。甚至某個ChildViewController的View進行Frame調整。ip
演示樣例代碼例如如下:開發
- (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。則必須運行it
[self.view layoutSubviews];