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方法。