viewDidLoad 和 viewWillAppear 中的不同子视图布局 [重复]
Posted
技术标签:
【中文标题】viewDidLoad 和 viewWillAppear 中的不同子视图布局 [重复]【英文标题】:Different subview layouts in viewDidLoad and viewWillAppear [duplicate] 【发布时间】:2012-12-19 17:19:29 【问题描述】:可能重复: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)
考虑到导航栏的高度。
我的子视图布局取决于根视图,但我不想在每次视图出现时都设置它们。
我们应该如何处理这两个调用?
【问题讨论】:
像以前一样对待他们。在 -viewWillAppear 中进行视图设置,因为那是导航栏高度的原因,然后在 -viewDidLoad 中进行初始化。 【参考方案1】:处理视图布局的正确位置是在UIViewController viewWillLayoutSubviews
方法中。每当视图控制器的视图调整大小时(例如首次显示时和旋转时)都会调用此方法。
如您所见,当调用viewDidLoad
时,视图控制器的视图尚未完全调整大小。
如果您需要支持 ios 4.3,那么您不能使用 viewWillLayoutSubviews
,因为它是在 5.0 中添加的。在这种情况下,请在viewWillAppear:
中进行布局。
【讨论】:
应该注意的是,-viewWillAppear 可以在视图框架设置和窗口完成自身定向之前调用。如果你在 iOS 4 中需要它,你需要等待 -viewDidAppear 被调用。以上是关于viewDidLoad 和 viewWillAppear 中的不同子视图布局 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
swift - 指定VC隐藏导航栏 - 禁用tabbar的根控制器手势,防止两个tabbar跳转 手势冲突
ecslidingviewcontroller和uislider
viewDidLoad 和 viewDidAppear 的区别