layoutSubviews setNeedsLayout layoutIfNeeded setNeedsDisplay

layoutSubviews

调用时机

1.修改view的大小
2.新增子view
3.scrollview滑动
4.屏幕翻转
5.更新视图的 constraints
这个方法开销很大,一般不主动调用。系统会在任何它需要重新计算视图的 frame 的时候调用这个方法,所以你应该在需要更新 frame 来重新定位或更改大小时重载它。

setNeedsLayout

这个方法调用后,表示view布局发生了改变,视图会在下一个 update cycle 中更新,就在系统调用视图们的 layoutSubviews 以及他们的所有子视图的 layoutSubviews 方法的时候。

layoutIfNeeded

当视图需要更新的时候,与 setNeedsLayout() 会让视图在下一周期调用 layoutSubviews 更新视图不同,layoutIfNeeded 会立即调用 layoutSubviews 方法。

setNeedsDisplay

这个方法调用后,它会给有内容更新的视图设置一个内部的标记,在下一个 update cycle 中,系统会遍历所有已标标记的视图,并调用它们的draw 方法。(draw方法也不应该直接调用,而应该通过调用触发方法,让系统在 run loop 中的不同结点自动调用)

你可能感兴趣的:(layoutSubviews setNeedsLayout layoutIfNeeded setNeedsDisplay)