Nimbus NIPagingScrollView和重新布局旋转

时间:2012-01-28 08:31:50

标签: iphone ios layout autorotate nimbus-ios

我正在使用NIPagingScrollView在iPhone上显示多个页面。

每当我轻弹到某个页面时,下一页也会预先加载,这很好。

当我旋转 iPhone从纵向模式到横向模式时,我让layoutSubviews在我的NIPageView子类中进行重新布局。 NIPagingScrollView设置为自动拉伸宽度和高度以保持全屏。这适用于当前页面。

但是,当我点击下一页时,布局会被破坏,因为之前已预取,并且还会自动调用layoutSubviews进行布局。

我猜原点在旋转的下一页上没有更新,或类似的东西。

是否有人暗示如何避免此问题(除了不使用Landscape)?这是Nimbus的一个错误吗?

编辑:我发现NIPagingScrollView提供了应由视图控制器调用的方法willRotateToInterfaceOrientation:duration:willAnimateRotationToInterfaceOrientation:duration:。我实现了这些调用,但它仍然无济于事。

1 个答案:

答案 0 :(得分: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];

}