viewDidLoad中的错误帧大小

可能重复:
为什么我必须在viewDidLoad中手动设置我的视图的框架?

我有iphone和ipad,两个故事板的通用应用程序,如果我在iphone模拟器上运行我的应用程序在viewDidLoad每个元素在笔尖每帧是正确的。 但是,如果我这样做的ipad(模拟器)在框架是零,但屏幕看起来是正确的。 你可以给我build议吗? 谢谢。

这是一个非常类似的问题ios setContentOffset不工作在iPad上 …我的答案是一样的那里:

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

viewWillAppear:是做这些事情的正确的地方,在这一点上,几何是设置的,所以获取和设置几何相关的属性是有意义的。

这也适用于获取几何相关的属性。 不要因为在一种情况下而不是在另一种情况下的正确行为而分心。主要的一点是,设置/获取几何特性太早会产生不可预知的结果。

您的屏幕看起来是正确的,因为您 viewWillAppear: / viewDidAppear: 之后看到结果。

更新(ios6)

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

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

(*除非应用程序背景,并成为前台应用程序,然后viewWillAppear:不会被调用)

我知道为什么发生了。 我正在使用AutoLayout。 当我在故事板中取消选中时,框架是正确的。