DrawRect ? ? ? ? layoutSubview

用來畫圖,

1.這個方法會在intiWithRect時候調(diào)用。如果在UIView初始化時沒有設(shè)置rect大小,將直接導(dǎo)致drawRect不被自動調(diào)用。

2、該方法在調(diào)用sizeToFit后被調(diào)用,所以可以先調(diào)用sizeToFit計算出size。然后系統(tǒng)自動調(diào)用drawRect:方法。

3、通過設(shè)置contentMode屬性值為UIViewContentModeRedraw。那么將在每次設(shè)置或更改frame的時候自動調(diào)用drawRect:。

4、直接調(diào)用setNeedsDisplay,或者setNeedsDisplayInRect:觸發(fā)drawRect:




LayoutSubview


  • 使用addSubview添加時會調(diào)用layoutSubView
    • 在被添加到父視圖 或添加子視圖(如果此視圖沒有frame或子視圖沒有frame則不會調(diào)用)


  • 設(shè)置父視圖或子視圖Size時會調(diào)用
  • 自身的size改變


  • 滾動scrollview 的時候也會調(diào)用
  • 設(shè)備的orientation(方向)改變時,涉及改變的UIViewControl 的root view
    (此時所有的控件被重新布局,相當(dāng)于A的frame被改變 那么會調(diào)用layoutSubview 而且如果控件有子視圖的話會再調(diào)用一次layoutSubview)
  • Resizing(拉伸) 一個 控件 也會調(diào)用它的父控件的layoutSubview
  • 調(diào)用setNeedsLayout時


還有一個重要的點,layoutSubview不是在調(diào)用完比如addSubview等方法之后就馬上調(diào)用,而是會在調(diào)用addSubview方法所在的作用域結(jié)束之后之后才調(diào)用,因此即使你在同一個方法中既使用了addSubViews又更改了frame,也是只會調(diào)用一次layoutSubview而已

如果要立即刷新,要先調(diào)用[view setNeedsLayout],把標(biāo)記設(shè)為需要布局,然后馬上調(diào)用[view layoutIfNeeded],實現(xiàn)布局

鏈接:http://www.itdecent.cn/p/db23c036998

-(BOOL)needsUpdateConstraints

使用此返回值去決定是否需要 調(diào)用updateConstraints作為正常布局過程的一部分。?

- (void)setNeedsUpdateConstraints

當(dāng)一個自定義view的某個屬性發(fā)生改變,并且可能影響到constraint時,需要調(diào)用此方法去標(biāo)記constraints需要在未來的某個點更新,系統(tǒng)然后調(diào)用updateConstraints.

- (void)updateConstraints

更新約束,自定義view應(yīng)該重寫此方法在其中建立constraints. 注意:要在實現(xiàn)在最后調(diào)用[super updateConstraints]?

- (void)updateConstraintsIfNeeded

立即觸發(fā)約束更新,自動更新布局。

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

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

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