setNeedsUpdateConstraints,needsUpdateConstraints等基于約束的AutoLayer的方法

1、setNeedsUpdateConstraints
當(dāng)一個(gè)自定義view的某個(gè)屬性發(fā)生改變,并且可能影響到constraint時(shí),需要調(diào)用此方法去標(biāo)記constraints需要在未來的某個(gè)點(diǎn)更新,系統(tǒng)然后調(diào)用updateConstraints.
2、needsUpdateConstraints
constraint-based layout system使用此返回值去決定是否需要調(diào)用updateConstraints作為正常布局過程的一部分。
3、updateConstraintsIfNeeded
立即觸發(fā)約束更新,自動(dòng)更新布局。
4、updateConstraints
自定義view應(yīng)該重寫此方法在其中建立constraints. 注意:要在實(shí)現(xiàn)在最后調(diào)用[super updateConstraints]
Auto Layout Process 自動(dòng)布局過程
與使用springs and struts(autoresizingMask)比較,Auto layout在view顯示之前,多引入了兩個(gè)步驟:updating constraints 和laying out views。每一個(gè)步驟都依賴于上一個(gè)。display依賴layout,而layout依賴updating constraints。 updating constraints->layout->display
第一步:updating constraints,被稱為測(cè)量階段,其從下向上(from subview to super view),為下一步layout準(zhǔn)備信息??梢酝ㄟ^調(diào)用方法setNeedUpdateConstraints去觸發(fā)此步。constraints的改變也會(huì)自動(dòng)的觸發(fā)此步。但是,當(dāng)你自定義view的時(shí)候,如果一些改變可能會(huì)影響到布局的時(shí)候,通常需要自己去通知Auto layout,updateConstraintsIfNeeded。
自定義view的話,通??梢灾貙憉pdateConstraints方法,在其中可以添加view需要的局部的contraints。
第二步:layout,其從上向下(from super view to subview),此步主要應(yīng)用上一步的信息去設(shè)置view的center和bounds??梢酝ㄟ^調(diào)用setNeedsLayout去觸發(fā)此步驟,此方法不會(huì)立即應(yīng)用layout。如果想要系統(tǒng)立即的更新layout,可以調(diào)用layoutIfNeeded。另外,自定義view可以重寫方法layoutSubViews來在layout的工程中得到更多的定制化效果。
第三步:display,此步時(shí)把view渲染到屏幕上,它與你是否使用Auto layout無關(guān),其操作是從上向下(from super view to subview),通過調(diào)用setNeedsDisplay觸發(fā),
因?yàn)槊恳徊蕉家蕾嚽耙徊?,因此一個(gè)display可能會(huì)觸發(fā)layout,當(dāng)有任何layout沒有被處理的時(shí)候,同理,layout可能會(huì)觸發(fā)updating constraints,當(dāng)constraint system更新改變的時(shí)候。
需要注意的是,這三步不是單向的,constraint-based layout是一個(gè)迭代的過程,layout過程中,可能去改變constraints,有一次觸發(fā)updating constraints,進(jìn)行一輪layout過程。
注意:如果你每一次調(diào)用自定義layoutSubviews都會(huì)導(dǎo)致另一個(gè)布局傳遞,那么你將會(huì)陷入一個(gè)無限循環(huán)中。

交流群

移動(dòng)開發(fā)交流群:264706196

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

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

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