iOS layoutSubviews 和 layoutIfNeeded

layoutSubviews在以下情況下會(huì)被調(diào)用:

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

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

layoutIfNeeded

也就是使用約束的時(shí)候 調(diào)一下可以立即更新效果
setNeedsLayout方法并不會(huì)立即刷新,立即刷新需要調(diào)用layoutIfNeeded方法!

setNeedsDisplay
與setNeedsLayout方法相似的方法是setNeedsDisplay方法。該方法在調(diào)用時(shí),會(huì)自動(dòng)調(diào)用drawRect方法。drawRect方法主要用來畫圖。所以,當(dāng)需要刷新布局時(shí),用setNeedsLayOut方法;當(dāng)需要重新繪畫時(shí),調(diào)用setNeedsDisplay方法。

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

相關(guān)閱讀更多精彩內(nèi)容

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