UIView(Controller)改变涉及到的方法调用

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事件

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容