iOS的setContentOffset不工作在iPad上

这真的很奇怪 我有一个包含三个图像的滚动视图,用户滑动以查看下一个图像。 不过,我希望第一个屏幕从中间图像开始。 简单; 我将使用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]; 

在scrollView被添加之前的所有设置(事实上,我们可以在滚动视图添加后得到相同的结果)。

ipad上的宽度是768,iphone上是320。

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

编辑:

看起来这与创作秩序有关; 移动到viewWillAppear而不是viewDidLoad,显然在iPhone和iPad的工作。 只是不一致是非常令人惊讶的….

你不应该在viewDidLoad中初始化与UI几何相关的东西,因为你的视图的几何不在这个时候设置,结果将是不可预知的。

正如你所发现的,viewWillAppear是做这些事情的正确的地方,在这一点上,几何体是这样设置的,因此获取和设置几何相关的属性是有意义的。

viewDidAppear。

更新(ios6)

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

这被称为after- viewWillAppear。 但要小心 – 他们并不总是被称为一起。 例如,-viewWDidLayoutSubviews在旋转后调用,-viewWillAppear不是。 -viewWillAppear在每次视图变成可见视图时被调用*,-viewDidLayoutSubviews不一定(只有当我们需要视图中继时)。

(*除非应用程序是backgrounder并正在成为前台应用程序,那么-viewWillAppear不会被调用)