可能的重复:
为什么我必须在 viewDidLoad 中手动设置视图的框架? https://stackoverflow.com/questions/6757018/why-am-i-having-to-manually-set-my-views-frame-in-viewdidload
我有适用于 iphone 和 ipad 的通用应用程序,两个故事板,如果我在 iphone 模拟器上运行我的应用程序viewDidLoad
nib 中每个元素的每一帧都是正确的。但如果我为 ipad(模拟器)执行此操作,框架为零,但屏幕看起来正确。你能给我建议吗?谢谢。
这是一个非常相似的问题ios setContentOffset 在 iPad 上不起作用 https://stackoverflow.com/questions/13904205/ios-setcontentoffset-not-working-on-ipad/13904962#13904962...我的答案与那里相同:
“你不应该初始化 UI 几何相关的东西viewDidLoad
,因为此时视图的几何形状尚未设置,结果将是不可预测的。
... viewWillAppear:
是执行这些操作的正确位置,此时几何图形已设置,因此获取和设置与几何图形相关的属性是有意义的。”
这也适用于getting几何相关的属性。不要因为它在一种情况下表现正确而在另一种情况下表现不正确而分心...要点是过早设置/获取几何属性会产生错误不可预料的结果。
你的屏幕looks正确,因为您看到了结果after viewWillAppear:
/ viewDidAppear:
.
更新(ios6)
在 ios6 中使用自动布局时,在布局子视图之前不会设置框架。在这些条件下获取帧数据的正确位置是在 viewController 方法中viewDidLayoutSubviews
.
这就是所谓的after viewWillAppear:
。但要小心——他们并不总是被叫到一起。例如,viewDidLayoutSubviews
旋转后调用,viewWillAppear:
不是。viewWillAppear:
每次视图变为可见视图*时都会调用,viewDidLayoutSubviews
不一定(仅当观点需要转达时)。
(* 除非该应用程序已进入后台并正在成为前台应用程序,则viewWillAppear:
不被调用)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)