視圖更新和渲染循環(huán)(render loop)有關(guān),工作流程如下圖:
主要分三步:
- 更新約束圾叼,從下往上蛤克,最終到達Window捺癞,
- 布局,從上往下
- 展示
每一步都有對應(yīng)的api
在iOS應(yīng)用中构挤,Window一般為頂級視圖髓介,每個window中都有一個布局引擎(engine),當(dāng)往視圖添加約束的時候筋现,實際上是在引擎中添加了一系列等式唐础,引擎負責(zé)計算出這些等式中所有變量的值,最終得出視圖的約束矾飞。
在engine對約束計算完畢后一膨,就會告知該視圖,該視圖則會通知它的上級視圖洒沦,我需要更新約束了豹绪,這個過程通常需要調(diào)用
- (void)setNeedsLayout;
在進入layout階段后,會調(diào)用
- (void)layoutSubviews;
在engine中申眼,多個不同塊的布局互不干擾瞒津,復(fù)雜度呈線性增加。
The engine is a layout cache and dependency tracker.