关于UIView的layoutSubviews

关于layoutSubviews的调用时机网上已经有很多总结了,以下为摘录的笔记:

1、init初始化不会触发layoutSubviews 
2、addSubview会触发layoutSubviews 
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 
4、滚动一个UIScrollView会触发layoutSubviews 
5、旋转Screen会触发父UIView上的layoutSubviews事件 
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

在layoutSubviews方法内部做以上6种修改不会导致递归,以上6种触发也仅对调用者自己有效,对子视图 其他视图无效。

以上6种类型的触发都是异步的,同setNeedsLayout的机制相同,都是将view标记了,在runloop的下一迭代中再调用。

若希望在做了以上六点修改后同步地去调用layoutSubviews,则可以直接调用layoutIfNeeded。
调用setNeedsLayout之后再调用layoutIfNeeded也同样能够使得layoutSubviews被同步调用。

layoutSubviews中适合用来设置子视图的布局(frame),若是自定义的视图和它的子视图中都实现了layoutSubviews方法,那子视图的次方法中应该再调用父类的( [super layoutSubviews]; )。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容