美文网首页
关于UIView的layoutSubviews

关于UIView的layoutSubviews

作者: nunca | 来源:发表于2018-11-21 18:35 被阅读0次

关于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]; )。

相关文章

网友评论

      本文标题:关于UIView的layoutSubviews

      本文链接:https://www.haomeiwen.com/subject/fyocqqtx.html