参考链接layoutSubviews总结 - BSPLover的专栏 - 博客频道 - CSDN.NET
1.drawRect:方法
系统固定的方法。在view的内容发生改变的时候调用此方法可以对view进行重新绘制。不可以直接调用。通过setNeedDisplay 或者 setNeedsDisplay:方法可以调用该方法。
比较吃内存
在此方法内可以使用CoreGraphics对view进行绘制的一些基本操作。
2.layoutsubviews方法
作用:调整子视图的位置。(附:子视图的添加最好不要写在init方法中)
调用时机:
a:直接调用setLayoutSubviews。
b:addSubview的时候。
c:当view的frame发生改变的时候。
d:滑动UIScrollView的时候。
e:旋转Screen会触发父UIView上的layoutSubviews事件。
f:改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
如何手动调用该方法?
通过setNeedsLayout或者layoutIfNeed方法。
-setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
-layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)
3.drawRect 和 layoutSubviews的区别?
前者是管理在视图上绘制的内容
后者是管理其子视图的相对位置信息