1997年, Auto Layout用到的布局算法Cassowary被發(fā)明了出來
2011年, 蘋果公司將Cassowary算法運用到了自家的布局引擎Auto Layout中
AutoLayout布局轉(zhuǎn)成視圖的具體尺寸/位置過程
1.App啟動后 開啟RunLoop 循環(huán)檢查圖層樹中是否存在約束變化
2.發(fā)生約束改變(直接/間接設(shè)置 更新 移除約束) RunLoop檢測到變化
3.布局引擎重新計算布局 將計算出新的視圖frame存在于布局引擎中
4.對比視圖新的frame 如果視圖的位置或尺寸發(fā)生了改變 調(diào)用視圖的父視圖setNeedsLayout打上需要布局的標(biāo)記
5.從上到下(父視圖->子視圖)遍歷視圖層級 調(diào)用被標(biāo)記為setNeedsLayout視圖的layoutsubViews方法
6.這個階段是從布局引擎中把計算好的尺寸/位置設(shè)置到視圖上
重寫layoutSubviews可以發(fā)現(xiàn)唁盏,視圖本身frame在該方法調(diào)用前已經(jīng)有值 子視圖在該方法調(diào)用前是舊值任斋,該方法調(diào)用完畢會賦上新值
Autolayout與Frame關(guān)系
1.Autolayou本質(zhì)是一個線性方程解析Engine 通過描述視圖之間布局關(guān)系 由引擎解析計算出位置/尺寸值
2.Frame是直接設(shè)置視圖的位置/尺寸數(shù)值
3.一個視圖使用一種布局方式 要么frame 要么AutoLayout
如果一個視圖使用了Autolayoutb布局席里。 程序運行中 体啰,通過frame設(shè)置位置/尺寸 不生效
AutoLayout布局的不同方式
1.NSLayoutConstraint
2.VFL
3.Interface Builder
4.NSLayoutAnchor
5.Masonry
6.UIStackView