UI

setNeedsLayout与layoutIfNeeded的区别

2020-07-15  本文已影响0人  Silence_xl

解释

更新布局总会重新触发layoutSubviews方法。

image

从上图中可以看到,runloopobserver回调=>CoreAnimation渲染引擎一次事务的提交=>CoreAnimation递归查询图层是否有布局上的更新=>CALayer layoutSublayers=>UIView layoutSubviews 这样一个调用的流程。从这里也可以看到UIView其实就是相当于CALayer的代理。

image

顺便看一眼drawRect方法的调用栈,从CA::Layer::layout_and_display_if_needed方法之前都是一样的。

关键点

[self setNeedsLayout];
[self layoutIfNeeded];

反之可能会出现布局错误的问题。

链接:https://www.jianshu.com/p/d46bcc656e04

上一篇下一篇

猜你喜欢

热点阅读