1. layoutSubviews
作用
layoutSubviews
是對subviews
的重新布局.例如我們想要更新子視圖的位置,大小等情況都是可以通過調用layoutSubviews
來實現的.layoutSubviews
默認是不做任何事情的,如果需要,可以再子類中重寫- 不要直接調用
layoutSubviews
方法,如果你想強制更新布局,可以調用setNeedsLayout
2. layoutSubviews
調用機制
- 直接調用
setLayoutSubviews
。addSubview
的時候觸發layoutSubviews
。- 當
view
的frame
發生改變的時候觸發layoutSubviews
。- 第一次滑動
UIScrollView
的時候觸發layoutSubviews
。- 旋轉
Screen
會觸發父UIView
上的layoutSubviews
事件。- 改變一個
UIView
大小的時候也會觸發父UIView
上的layoutSubviews
事件。注意:當view的size的值為0的時候,addSubview也不會調用layoutSubviews。當要給這個view添加子控件的時候不管他的size有沒有值都會調用
3. 其他
①、
- (void)layoutSubviews;
這個方法,默認沒有做任何事情,需要子類進行重寫;
②、- (void)setNeedsLayout;
標記為需要重新布局,異步調用layoutIfNeeded
刷新布局,不立即刷新,但layoutSubviews
一定會被調用;
③、- (void)layoutIfNeeded;
如果,有需要刷新的標記,立即調用layoutSubviews
進行布局(如果沒有標記,不會調用layoutSubviews
)。
如果要立即刷新,要先調用[view setNeedsLayout],把標記設為需要布局,然后馬上調用[view layoutIfNeeded],實現布局。在視圖第一次顯示之前,標記總是“需要刷新”的,可以直接調用[view layoutIfNeeded]