1、viewDidLoad、viewWillAppear执行完后会执行-(void)viewWillLayoutSubviews,-(void)viewDidLayoutSubviews。
任何依赖于bounds/frame的约束都应该在viewDidLayoutSubviews之后设置,而不应该放在viewDidLoad或viewWillAppear这些中,也最好不要放在viewDidAppear中。
在viewWillAppear时,使用auto layout布局view的bounds/frame还未确定,如果此时获取bounds/frame,肯定是不正确的。
放在viewDidAppear之中来设置依赖于其他view的bounds/frame的view又有些晚。
2、当在self.view上的子控件的高度或者宽度改变时,会先执行-(void)viewWillLayoutSubviews,-(void)viewDidLayoutSubviews,然后执行子控件中的-(void)layoutSubviews。viewDidLayoutSubviews只能代表当前controller下的view的layout被调整完成,并不代表当前view下所有subviews的layout调整完成。
3、layoutSubviews触发时机
(1)init初始化不会触发layoutSubviews;但是是用initWithFrame进行初始化时,当rect的值不为CGRectZero时,也会触发
(2)addSubview会触发layoutSubviews
(3)设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
(4)滚动一个UIScrollView会触发layoutSubviews
(5)改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
(1、状态栏隐藏及展示
(2、导航栏隐藏及展示
(4、热点问题
(5、刘海问题
(6)旋转Screen会触发父UIView上的layoutSubviews事件
网友评论