5

我有一个 UIScrollView,其中启用了仅垂直滚动。我正在显示一个按钮网格(类似于照片查看器图像网格)。必须根据屏幕方向以不同方式绘制网格,以便使用所有屏幕空间。考虑到我的按钮大小,纵向每行可以容纳 3 个,横向每行可以容纳 4 个。

我将所有按钮重新定位在:willRotateToInterfaceOrientation:duration 中,然后在我的 UIScrollView 上调用:setContentSize:。除了调用 SetContentSize: 之后发生的自动滚动之外,一切似乎都运行良好。换句话说,假设我是纵向的,并且向下滚动了列表的 3/4,当我旋转到横向时,它会自动将所有内容滚动到顶部。

有趣的是,在同样的场景中,如果我向上或向下做一个小的滑动滚动,然后立即旋转设备,滚动视图会正确重绘,并保留当前的滚动位置!

因此,需要明确的是,这里的罪魁祸首似乎是 SetContentSize:,但显然我必须调用它才能使滚动视图正确滚动。

关于如何保留当前滚动位置的任何想法?

谢谢!

4

2 回答 2

1

您可以尝试实现该UIScrollViewDelegate方法scrollViewShouldScrollToTop:,该方法告诉调用者是否滚动到顶部。您可能必须在您的委托中设置一些标志来指示是否正在进行轮换,因为在正常情况下,您实际上可能希望能够点击状态栏并使滚动视图滚动到顶部。

另一方面,如果您不希望滚动视图自动滚动到顶部,只需实现该委托方法并让它返回 NO。

于 2011-04-14T16:58:22.747 回答
0

我遇到了这个问题,就这样做了,对我来说效果很好

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    //calculate percentage down scrollview currently at
    float c = self.scrollView.contentOffset.y / self.scrollView.contentSize.height;

    //reposition subviews in the scrollview
    [self positionThumbnails:toInterfaceOrientation];

    //set the new scrollview offset to the same percentage, 
    // using the new scrollview height to calculate
    self.scrollView.contentOffset = 
          CGPointMake(0, c * self.scrollView.contentSize.height);
}

就我而言,我有一个滚动视图,其宽度与设备大小固定,高度可变

于 2012-03-07T04:26:08.017 回答