iOS layoutSubviews 和 layoutIfNeeded

layoutSubviews在以下情況下會被調用:

  • init初始化不會觸發(fā)layoutSubviews
    但是是用initWithFrame 進行初始化時,當rect的值不為CGRectZero時,會觸發(fā)
  • addSubview會觸發(fā)layoutSubviews
  • 設置view的Frame會觸發(fā)layoutSubviews,當然前提是frame的值設置前后發(fā)生了變化
    滑動UIScrollView的時候。
  • 旋轉Screen會觸發(fā)父UIView上的layoutSubviews事件(這個我驗證了一下 確實沒有觸發(fā)
    layoutSubviews方法,查了很多資料都說會觸發(fā),大家自己定奪)。

layoutSubviews 方法只能被系統(tǒng)觸發(fā)調用,程序員不能手動直接調用該方法。要引起該方法的調用,可以調用 UIView 的setNeedsLayout方法來標記一個 UIView。這樣一來,在 UI 線程的下次繪制循環(huán)中,系統(tǒng)便會調用該 UIView 的layoutSubviews方法。

layoutIfNeeded

也就是使用約束的時候 調一下可以立即更新效果
setNeedsLayout方法并不會立即刷新,立即刷新需要調用layoutIfNeeded方法!

setNeedsDisplay
與setNeedsLayout方法相似的方法是setNeedsDisplay方法。該方法在調用時,會自動調用drawRect方法。drawRect方法主要用來畫圖。所以,當需要刷新布局時,用setNeedsLayOut方法;當需要重新繪畫時,調用setNeedsDisplay方法。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容