iOS setContentOffset 在 ipad 上不起作用

Posted

技术标签:

【中文标题】iOS setContentOffset 在 ipad 上不起作用【英文标题】:iOS setContentOffset not working on ipad 【发布时间】:2012-12-16 18:21:58 【问题描述】:

这真的很奇怪。我有一个包含三个图像的滚动视图,用户滑动查看下一个图像。但是,我希望第一个屏幕从中间图像开始。简单的;我会使用 setContentOffset 一切都会好的。

代码适用于 iPhone 模拟器,但不适用于 iPad 模拟器(或设备!)

CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat height = CGRectGetHeight(screen);
CGFloat width = CGRectGetWidth(screen);

CGPoint rightOffset = CGPointMake(width, 0);
[scrollView setContentOffset:rightOffset animated:YES];

在添加滚动视图之前设置(实际上我们可以在添加滚动视图之后执行此操作,结果相同)。

宽度在 ipad 上返回 768,在 iphone 上返回 320。

这是一个错误吗? Xcode 4.4.1 和 ios 6。

编辑:

看起来这与创建顺序有关;移至 viewWillAppear 而不是 viewDidLoad 并且显然在 iphone 和 ipad 上工作。只是前后不一致就很让人吃惊了....

【问题讨论】:

问题还没有解决吗? 【参考方案1】:

您不应该在 viewDidLoad 中初始化 UI 几何相关的东西,因为此时您的视图的几何没有设置,结果将是不可预测的。

正如您所发现的,viewWillAppear 是执行这些操作的正确位置,此时几何已设置好,因此获取和设置与几何相关的属性是有意义的。

viewDidAppear.

更新 (ios6)

在 ios6 中使用自动布局时,在布局子视图之前不会设置框架。在这些条件下获取帧数据的正确位置是在 viewController 方法 -viewDidLayoutSubviews 中。

这在 -viewWillAppear 之后被称为。但要小心 - 他们并不总是被召集在一起。例如,旋转后调用 -viewWDidLayoutSubviews,而不调用 -viewWillAppear。每次视图变为可见视图*时都会调用 -viewWillAppear,-viewDidLayoutSubviews 不一定(仅当我们的视图需要中继时)。

(* 除非应用程序是后台程序并且正在成为前台应用程序,否则 -viewWillAppear 不会被调用)

【讨论】:

感谢您的回答。问题主要集中在为什么这适用于 iphone 而不是 ipad;如果有人知道为什么会这样,那会很有趣! 我有同样的问题,但使用的是 iOS 7。***.com/questions/27250010/…

以上是关于iOS setContentOffset 在 ipad 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

手动调用 UIRefreshControl 并使用 setContentOffset

UIScrollView 无限滚动 setContentOffset

为啥 setContentOffset 在 scrollViewDidEndDragging 方法中不起作用?

取消搜索时 setContentOffset 不正确

使用 setContentOffSet 按钮滚动

UITableView, setContentOffset 动画:NO 不会在 iPad 上滚动