當(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)用
- 直接調(diào)用[self setNeedsLayout]。(前提是已經(jīng)加載到父View中)
- 被父控件addSubview的時(shí)候。(當(dāng)view的size的值為0的時(shí)候,addSubview也不會調(diào)用layoutSubviews。當(dāng)要給這個(gè)view添加子控件的時(shí)候不管他的size有沒有值都會調(diào)用)
- 當(dāng)view的size發(fā)生改變的時(shí)候。
- 滑動UIScrollView的時(shí)候。
- 旋轉(zhuǎn)Screen會觸發(fā)父UIView上的layoutSubviews事件。