在方向更改期间,UIScrollView在SetContentSize之后自动滚动到顶部 - 我该如何防止这种情况?

bpa*_*100 5 iphone uiscrollview autoscroll ipad ios

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

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

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

所以,要清楚,罪魁祸首似乎是SetContentSize:,但显然我必须调用它以使滚动视图正确滚动.

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

谢谢!

Mar*_*off 1

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

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