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í)沒(méi)有觸發(fā)layoutSubviews方法馋劈,查了很多資料都說(shuō)會(huì)觸發(fā),大家自己定奪)简烤。
layoutSubviews 方法只能被系統(tǒng)觸發(fā)調(diào)用错蝴,程序員不能手動(dòng)直接調(diào)用該方法洲愤。要引起該方法的調(diào)用,可以調(diào)用 UIView 的
setNeedsLayout
方法來(lái)標(biāo)記一個(gè) UIView顷锰。這樣一來(lái)柬赐,在 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方法主要用來(lái)畫(huà)圖良狈。所以后添,當(dāng)需要刷新布局時(shí),用setNeedsLayOut方法薪丁;當(dāng)需要重新繪畫(huà)時(shí)遇西,調(diào)用setNeedsDisplay方法。