iOS-Auto Layout[4]-Simple Constraints

本文列举了一些Auto Layout需要处理的约束行为。

Single View

对比设计如下的布局效果时:

AutoLayout-SimpleConstraints

左边的Constraint为:

1
2
3
4
Red View.Leading = Superview.LeadingMargin
Red View.Trailing = Superview.TrailingMargin
Red View.Top = Top Layout Guide.Bottom + 20.0
Bottom Layout Guide.Top = Red View.Bottom + 20.0

注意:系统会自动设置RootView的Margin,左右的间距为16或者20,取决于设备,上下为0。对于SuperView和SubView,默认间距为20,而对于同一层级的View,默认间距为8。

左边这样的约束组合,没办法自动适配有StatusBar和没有StatusBar的情况,因为上下间距固定为20。

右边的Constraint为:

1
2
3
4
5
6
Blue View.Leading = Superview.LeadingMargin
Blue View.Trailing = Superview.TrailingMargin
Blue View.Top = Top Layout Guide.Bottom + 8.0 (Priority 750)
Blue View.Top >= Superview.Top + 20.0
Bottom Layout Guide.Top = Blue View.Bottom + 8.0 (Priority 750)
Superview.Bottom >= Blue View.Bottom + 20.0

这样,可以保证在Bar时,上下间距为8,没有Bar时,为20,优先级为750较低,优先满足其他的Constraints。

Two Views with Complex Widths

当要实现,左边宽度至少为150,右边的宽度尽可能是左边的两倍时:

AutoLayout-SimpleConstraints

建立Constraints如下:

1
2
3
4
5
6
7
8
9
Blue View.Leading = Superview.LeadingMargin
Red View.Leading = Blue View.Trailing + Standard
Red View.Trailing = Superview.TrailingMargin
Blue View.Top = Top Layout Guide.Bottom + 20.0
Red View.Top = Top Layout Guide.Bottom + 20.0
Bottom Layout Guide.Top = Blue View.Bottom + 20.0
Bottom Layout Guide.Top = Red View.Bottom + 20.0
Red View.Width = 2.0 x Blue View.Width (Priority 750)
Blue View.Width >= 150.0

当宽度超过458(150 + 300 + 8)时,可以满足右边的宽度为左边两倍,小于458时,也能保证左边的宽度至少150,右边的尽可能接近两倍。