setNeedsDisplay、setNeedsLayout、layoutIfNeed区别

986 阅读1分钟

一、什么情况下会调用layoutSubviews ?

1、调用setNeedsLayout  layoutIfNeed,直接调用setLayoutSubviews  

2、addsubview时触发layoutSubviews  

3、改变一个view的frame会触发layoutSubviews  

4、改变view的size会触发父view的layoutSubviews  

5、滚动会触发layoutSubviews  

6、旋转Screen会触发父UIView上的layoutSubviews事件

二、什么情况会调用draw rect方法

1、controller的loadView、viewdidLoad方法调用之后,view即将出现在屏幕之前系统调用drawRect。 

2、sizeToFit方法调用之后。  

3、设置contetMode为UIViewCOntentModelRedraw,之后每次更改frame的时候调用redraw方法。  

4、调用setNeedsDisplay方法。

总结

setNeedsDisplay会调用drawRect方法重画页面

setNeedsLayout会调用layoutSubviews,页面才会发生变化。

调用layoutIfNeed不会触发VC中 viewDidLayoutSubviews 和 viewWillLayoutSubviews 里面重写 views的布局