iOS中setNeedsLayout与layoutIfNeeded调用顺序

首先我们要弄明白这两个方法调用的时机:
layoutIfNeeded
对于已经标记刷新的布局,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)。

setNeedsLayout
标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,在下一轮runloop结束前刷新,layoutSubviews一定会被调用。

总结:
setNeedsLayout一定刷新,先对需要刷新的布局进行标记,但是存在延迟,底层其实也是调用layoutIfNeeded方法刷新。
layoutIfNeeded只有被标记刷新,才会去刷新。
[self setNeedsLayout];
[self layoutIfNeeded];

你可能感兴趣的:(iOS中setNeedsLayout与layoutIfNeeded调用顺序)