setNeedsLayout和layoutIfNeeded有什么作用?

當(dāng)一個(gè)UIView對象調(diào)用setNeedsLayout方法時(shí),實(shí)際上等同于做了一個(gè)標(biāo)記,告訴系統(tǒng)需要重新布局,但不會立刻執(zhí)行,直到drawing cycle循環(huán)到達(dá)該節(jié)點(diǎn)時(shí),才會調(diào)用layoutSubviews方法重新布局。
layoutIfNeeded允許在drawing cycle循環(huán)到達(dá)該節(jié)點(diǎn)之前,就立刻執(zhí)行布局刷新調(diào)用layoutSubviews方法。換而言之,調(diào)用layoutIfNeeded會立即重新布局,前提是對象布局設(shè)置已經(jīng)改變或者在此之前調(diào)用setNeedsLayout方法標(biāo)記,否則layoutIfNeeded并不會觸發(fā)layoutSubviews的調(diào)用。
layoutSubviews在什么情況下調(diào)用

  1. 直接調(diào)用[self setNeedsLayout]。(前提是已經(jīng)加載到父View中)
  2. 被父控件addSubview的時(shí)候。(當(dāng)view的size的值為0的時(shí)候,addSubview也不會調(diào)用layoutSubviews。當(dāng)要給這個(gè)view添加子控件的時(shí)候不管他的size有沒有值都會調(diào)用)
  3. 當(dāng)view的size發(fā)生改變的時(shí)候。
  4. 滑動UIScrollView的時(shí)候。
  5. 旋轉(zhuǎn)Screen會觸發(fā)父UIView上的layoutSubviews事件。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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