AutoLayout布局原理

1997年, Auto Layout用到的布局算法Cassowary被發(fā)明了出來(lái)
2011年, 蘋(píng)果公司將Cassowary算法運(yùn)用到了自家的布局引擎Auto Layout中

AutoLayout布局轉(zhuǎn)成視圖的具體尺寸/位置過(guò)程

1.App啟動(dòng)后 開(kāi)啟RunLoop 循環(huán)檢查圖層樹(shù)中是否存在約束變化
2.發(fā)生約束改變(直接/間接設(shè)置 更新 移除約束) RunLoop檢測(cè)到變化
3.布局引擎重新計(jì)算布局 將計(jì)算出新的視圖frame存在于布局引擎中
4.對(duì)比視圖新的frame 如果視圖的位置或尺寸發(fā)生了改變 調(diào)用視圖的父視圖setNeedsLayout打上需要布局的標(biāo)記
5.從上到下(父視圖->子視圖)遍歷視圖層級(jí) 調(diào)用被標(biāo)記為setNeedsLayout視圖的layoutsubViews方法
6.這個(gè)階段是從布局引擎中把計(jì)算好的尺寸/位置設(shè)置到視圖上
重寫(xiě)layoutSubviews可以發(fā)現(xiàn),視圖本身frame在該方法調(diào)用前已經(jīng)有值 子視圖在該方法調(diào)用前是舊值,該方法調(diào)用完畢會(huì)賦上新值

Autolayout與Frame關(guān)系

1.Autolayou本質(zhì)是一個(gè)線性方程解析Engine 通過(guò)描述視圖之間布局關(guān)系 由引擎解析計(jì)算出位置/尺寸值
2.Frame是直接設(shè)置視圖的位置/尺寸數(shù)值
3.一個(gè)視圖使用一種布局方式 要么frame 要么AutoLayout
如果一個(gè)視圖使用了Autolayoutb布局。 程序運(yùn)行中 ,通過(guò)frame設(shè)置位置/尺寸 不生效

AutoLayout布局的不同方式

1.NSLayoutConstraint
2.VFL
3.Interface Builder
4.NSLayoutAnchor
5.Masonry
6.UIStackView

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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