2012-01-28 29 views
2

我正在使用NIPagingScrollView在iPhone上顯示多個頁面。Nimbus NIPagingScrollView和旋轉時重新佈局

每當我彈出一個頁面,下一頁也預先加載,這很好。

當我旋轉的iPhone從人像到風景模式,我讓layoutSubviews做重新布點在我的NIPageView子類。 NIPagingScrollView被設置爲在寬度和高度上自動拉伸以保持全屏。這適用於當前頁面。

但是當我輕彈到下一頁時,佈局被破壞,因爲它之前被預取,並且也被自動呼叫layoutSubviews覆蓋。

我想原點不會在旋轉的下一頁上更新,或者類似的東西。

有人提示我如何避免這個問題(除了不使用景觀)?這是Nimbus中的一個錯誤嗎?

編輯:我發現NIPagingScrollView提供方法willRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:應由視圖控制器被調用。我實現了這些調用,但它仍然沒有幫助。

回答

0

確實NIPagingScrollView提供了這些方法,但是如果你看看它們,你會發現佈局計算是基於scrollview框架值的。

所以,如果你想給你的分頁滾動視圖正確的值,例如框架或你的主視圖(控制器視圖)分頁滾動視圖(示例中的_scrollView)。

這樣,就在動畫之前,您的分頁滾動視圖將具有正確的等待框架,並且您的佈局將被正確地重新計算。

- (void)willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation 
            duration: (NSTimeInterval)duration { 

    // Your missing line of code to set the scroll view frame values 
    [self->_scrollView setFrame:self.view.bounds]; 

    [self->_scrollView willAnimateRotationToInterfaceOrientation: toInterfaceOrientation 
                 duration: duration]; 

    [super willAnimateRotationToInterfaceOrientation: toInterfaceOrientation 
              duration: duration]; 

} 
+0

感謝您的提示,我會在下次嘗試使用此代碼時嘗試一下! – fabb 2012-02-20 09:21:17