2011-04-14 36 views
5

我有一个UIScrollView,其中只启用垂直滚动。我正在显示一个按钮网格(类似于照片查看器图像网格)。网格必须根据屏幕方向以不同方式绘制,以便使用所有的屏幕空间。鉴于我的按钮的大小,我可以纵向放入3行,横向放入4行。在定向更改期间,UIScrollView在SetContentSize之后自动滚动到顶部 - 我该如何防止该问题?

我重新定位了所有按钮:willRotateToInterfaceOrientation:duration,然后在我的UIScrollView上调用:setContentSize:。一切似乎都很好,除了在调用SetContentSize之后发生的自动滚动之外:换句话说,假设我处于肖像状态,并沿着列表的3/4滚动,当我旋转到横向时,它会自动将所有背部滚动到顶部。

有趣的是,在相同的情况下,如果我做一个小型轻弹向上或向下滚动,然后立即旋转设备,滚动视图会正确重绘,并保留当前滚动位置!

所以,要清楚,这里的罪魁祸首似乎是SetContentSize :,但显然我必须调用该滚动视图才能正确滚动。

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

谢谢!

回答

1

您可能会尝试执行UIScrollViewDelegate方法scrollViewShouldScrollToTop:,它告诉调用方是否滚动到顶部。您可能必须在委托中设置一些标志,指示是否正在进行轮播,因为在正常情况下,您可能实际上需要能够点按状态栏并将滚动视图滚动到顶部。

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

+0

这没有按”工作。这与使用相同的效果:scrollView.scrollsToTop = NO;其中,是的,当点击状态栏时防止自动滚动到顶部,但是,我在原始问题中描述的行为仍然存在... – bpatrick100 2011-04-14 17:36:20

+0

另一个想法:在调用'setContentSize:'之前,请记住你的内容,然后在调用之后,调用'setContentOffset:'。在设置内容大小时,内容偏移量可能会有意地重置为(0,0)。您可能已将内容大小重置为不再包含内容偏移量在重置大小之前所包含的内容大小。因此,通过确保在内容大小更改后始终显示某些内容,SDK在某种程度上可能会保护自己和用户体验。 – 2011-04-14 17:45:07

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); 
} 

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

相关问题