对subviews进行布局,默认没做任何事情,需要子类进行重写。

以下情况会被调用:

1.初始化initwithframe,frame不为cgrectzero时会被调用

2.设置view的frame,当frame不为cgrectzero时会被调用

3.addsubview

4.旋转屏幕screen

5.滚动uiscrollview

6.改变uiview的大小

调用setNeedsLayout 标记这个视图需要重新布局,layoutSubviews会被调用

调用setLayoutIfNeed ,如果有视图被标记需要重新布局,layoutsubviews会被立即调用

即setNeedsLayout 标记视图需要重新布局,在调用setLayoutIfNeed ,layoutSubviews就会立即重新布局

 

layoutSubviews 总是在drawRect之前被调用,先布局。