layoutSubviews在什么時候調(diào)用

1. layoutSubviews作用

  • layoutSubviews是對subviews的重新布局.例如我們想要更新子視圖的位置,大小等情況都是可以通過調(diào)用layoutSubviews來實現(xiàn)的.
  • layoutSubviews默認是不做任何事情的,如果需要,可以再子類中重寫
  • 不要直接調(diào)用layoutSubviews方法,如果你想強制更新布局,可以調(diào)用setNeedsLayout

2. layoutSubviews調(diào)用機制

  1. 直接調(diào)用setLayoutSubviews
  2. addSubview的時候觸發(fā)layoutSubviews。
  3. viewframe發(fā)生改變的時候觸發(fā)layoutSubviews。
  4. 第一次滑動UIScrollView的時候觸發(fā)layoutSubviews。
  5. 旋轉Screen會觸發(fā)父UIView上的layoutSubviews事件。
  6. 改變一個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]

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容