iphone - UIScrollView 在方向更改期间在 SetContentSize 之后自动滚动到顶部 - 我怎样才能防止这种情况发生?

标签 iphone ios ipad uiscrollview autoscroll

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

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

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

所以,要明确一点,这里的罪魁祸首似乎是 SetContentSize:,但显然我必须调用它才能使 ScrollView 正确滚动。

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

谢谢!

最佳答案

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

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

关于iphone - UIScrollView 在方向更改期间在 SetContentSize 之后自动滚动到顶部 - 我怎样才能防止这种情况发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666743/

相关文章:

iphone - 如何检查 NSString 中的十六进制颜色在 Objective C 中是浅色还是深色?

ios - 如何检测在 onEnded 关闭时是否启动了 sequensed 的第二个手势?

iphone - AppDelegate 中的 CoreData(存储新对象)= SIGABRT

ios - 需要在ios中的didselectitematindexpath上摇动collectionviewcell

ios - UICollectionView 自动滚动到 IndexPath 处的单元格

javascript - 第一次在 iPad 上点击按钮不起作用

html - Safari - IPAD - 在没有 -webkit-overflow-scrolling 的情况下禁用弹跳(无滚动)

ios - 使用模拟器为 iOS MDM 创建沙箱环境

iphone - 谁能告诉我如何向 UIScrollView 添加文本的示例?

ios - UIWebview 加载时可以更改 URL 吗? (iOS)