2

を使用しNIPagingScrollViewて、iPhone で複数のページを表示しています。

ページにフリックするたびに、次のページもプリロードされます。これは問題ありません。

iPhone を縦モードから横モードに回転させるlayoutSubviewsと、サブクラスの で再レイアウトを行いNIPageViewます。全NIPagingScrollView画面表示を維持するために、幅と高さを自動伸縮するように設定されています。これは現在のページで機能します。

しかし、次のページにフリックすると、以前にプリフェッチされ、自動呼び出しによってレイアウトされたため、レイアウトが壊れていますlayoutSubviews

ローテーションの次のページで原点が正しく更新されていないか、そのようなものだと思います。

この問題を回避する方法についてのヒントはありますか (Landscape を使用しない以外に)。これはNimbusのバグですか?

編集:NIPagingScrollViewメソッドを提供しwillRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:ビューコントローラーによって呼び出される必要があることを発見しました。これらの呼び出しを実装しましたが、それでも役に立ちません。

4

1 に答える 1

0

実際にNIPagingScrollViewこれらのメソッドを提供していますが、それらを見ると、レイアウトの計算がスクロールビュー フレームの値に基づいていることがわかります。

したがって、ページング スクロール ビュー (例では _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];

}
于 2012-02-19T19:14:53.807 に答える