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]