iOS Autolayout狀況下,ViewController嵌套時,childViewController的Frame異常問題


近期項目中,使用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];
相關文章
相關標籤/搜索