init方法不会调用layoutSubviews,但是是用initWithFrame进行初始化时,当rect的值不为CGRectZero时,会触发
addSubview会触发layoutSubviews方法setFrame只有当设置的frame的参数的size与原来的size不同,才会触发其view的layoutSubviews方法- 滑动
UIScrollView会调用scrollview及scrollview上的view的layoutSubviews方法- 旋转设备只会调用
VC的view的layoutSubviews方法- 直接调用
[self setNeedsLayout];(这个在上面苹果官方文档里有说明)
-layoutSubviews方法:这个方法默认没有做任何事情,需要子类进行重写
-setNeedsLayout方法:标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
-layoutIfNeeded方法:如果有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)
如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局
在视图第一次显示之前,标记总是需要刷新的,可以直接调用[view layoutIfNeeded]









网友评论