iOS的setContentOffset不工作在iPad(iOS setContentOffset

2019-07-05 12:09发布

这真是奇怪。 我有一个包含三个图像滚动型,用户刷卡,看到未来的图像。 不过,我想第一个屏幕在中间的图像开始。 简单; 我将使用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];

所有集只是滚动视图前加入(事实上,我们可以做到这一点,滚动视图中添加具有相同的结果后)。

宽度在iPhone上返回768上ipad和320。

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

编辑:

看起来这是与创建顺序做; 移动到viewWillAppear中,而不是viewDidLoad中和工作显然对iPhone和iPad。 就在矛盾是非常令人惊讶....

Answer 1:

你不应该在初始化UI的viewDidLoad几何相关的东西,因为你的观点的几何形状没有设置在这一点上,其结果将是不可预知的。

正如你已经发现,viewWillAppear中是做这些事情,在这一点上的几何形状被设置成获取和设置几何图形相关的属性是有意义的正确位置。

viewDidAppear。

更新(iOS6的)

当在iOS6的使用自动布局,框架都没有设置,直到子视图已经奠定了。 让这些条件下,帧数据在正确的地方是在方法的viewController -viewDidLayoutSubviews。

这-viewWillAppear 调用。 不过要小心 - 它们并不总是叫在一起。 例如,-viewWDidLayoutSubviews是旋转后调用,-viewWillAppear不是。 -viewWillAppear被称为每一个角度的可视视图*,-viewDidLayoutSubviews不一定时间(仅在需要我们的观点中继​​出)。

(*除非应用为背景资料,并正在成为前台的应用程序,然后-viewWillAppear不叫)



文章来源: iOS setContentOffset not working on ipad