对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之前被调用,先布局。