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