iOS视图约束

自动约束方法

  1. updateConstraintsIfNedded
    触发开始约束更新
    当有新的布局时,系统调用此方法确保视图和子视图约束信息的更新,系统会自动调用这方法,我们也可以手动调用此方法,来检查最新的约束条件

  2. updateConstraints
    更新约束
    我们可以通过重写此方法来设置自己的约束,系统在调用layOut布局之前,回调用这个方法,确认在视图的约束
    当我们的视图有约束变化或者失效,我们可以改变这些约束然后调用setNeedUpdateConstraints标记约束需要更新
    需要在此方法最后调用super updateConstraints

  3. -(BOOL)neddUpdateConstrains
    调用此方法根据此方法的返回 决定是否需要更新约束

  4. setNeedsUpdateConstraints
    当视图需要更新时 我们可以调用此方法,然后在系统决定更新时机

updateConstranins和layOut方法联系

AutoLayout在更新显示view之前,会先调用updateContrains和layingOutView,layout和依赖于Contrains,而view的最终显示依赖于layout

第一步:update constrains 进行视图的约束,从俯视图到子视图更新约束信息,可以通过调用setNeedsUpdateConstraints来触发此步骤. 而当我们做出一些改变约束的事情事,可以调用updateConstraintsIfNedded来通知约束改变,可以在updateConstraints方法中重写或者补充一些视图的约束

第二步: lauout 根据上一步的约束结果,从父视图到子视图来设置视图的bounds frame等 确定试图位置,与constrains类似 有setNeedLayout layoutIfNeeded layoutSubviews方法

第三步: 此步骤时 把view展示在屏幕上 此步骤可以通过setNeedDisplay来触发

这三个步骤互相依赖,每一步的触发都依赖于上一步

补充

`UIViewControlle

```r`中有`- (void)updateViewConstraints`默认实现是调用UIView的`uodateConstraints`