2012-12-19 52 views
5

可能重复:
UIViewController returns invalid frame?不同的子视图布局

在调试我注意到,在viewDidLoad打电话给我的观点框架origin=(x=0, y=20) size=(width=320, height=460)这是不准确的。在viewWillAppear称它设置正确:origin=(x=0, y=0) size=(width=320, height=416)考虑导航栏高度。 我的子视图布局取决于根视图,但我不想在每次显示视图时设置它们。

我们应该如何处理这两个电话?

+0

与你一样处理它们。在-viewWillAppear中查看设置,因为这是占用导航栏高度的那个,然后在-viewDidLoad中进行初始化。 – CodaFi

回答

6

处理视图布局的适当位置在UIViewController viewWillLayoutSubviews方法中。只要视图控制器视图的大小被调用,比如第一次显示和旋转时就调用它。

正如你所看到的,当调用viewDidLoad时,视图控制器的视图还没有被完全调整大小。

如果您需要支持iOS 4.3,那么您不能使用viewWillLayoutSubviews,因为它已在5.0中添加。在这种情况下,请执行viewWillAppear:中的布局。

+0

应该注意的是-viewWillAppear可以在视图框架被设置并且窗口已经完成定向之前被调用。如果你需要iOS 4,你需要等待-viewDidAppear被调用。 –