viewDidLoad中的帧大小错误



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

我有适用于iphone和ipad的通用应用程序,两个故事板,如果我在viewDidLoad中的iphone模拟器上运行我的应用程序,那么nib中每个元素的每一帧都是正确的。但如果我为ipad(模拟器(做这件事,画面为零,但屏幕看起来是正确的。你能告诉我smth吗?谢谢

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

"您不应该在viewDidLoad中初始化与UI几何图形相关的内容,因为此时视图的几何图形尚未设置,结果将是不可预测的。

viewWillAppear:是执行这些操作的正确位置,此时已设置几何体,因此获取和设置与几何体相关的属性是有意义的。">

这也适用于获取几何体相关属性。不要因为它在一种情况下表现正确而分心。。。主要的一点是过早地设置/获取几何体属性将产生不可预测的结果。

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

更新(ios6(

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

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

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

我弄清楚了为什么会发生这种事。我在使用AutoLayout。当我在情节提要中取消选中它时,框架是正确的。

最新更新