Auto Layout Without Constraints - acaec/Auto-Layout-Guide GitHub Wiki

无约束的自动布局

栈视图提供了一个简单的方法来使用自动布局的强大功能而不需要引进复杂的约束。一个单独的栈视图定义了用户界面的一行或是一列的元素。栈视图基于这些元素的属性对它们加以布置。

主轴(axis):(UIStackView only)定义了栈视图的排列方向,不管是竖直的还是水平的。

方向(orientation):(NSStackView only)定义了栈视图的排列方向,不管是竖直的还是水平的。

分布(distribution):定义了视图沿主轴的布局。

队列(alignment):定义了与栈视图主轴垂直的布局

间隔(spacing):定义了相邻的视图之间的间隔

要使用一个栈视图的话,只需要在界面创建器(Interface Builder)的画板上拖拽一个水平或者竖直的栈视图即可。然后拖出具体内容并将其放入栈中即可。

如果一个物体有一个固有的内容大小,它在栈中会以那样的大小显示。如果它没有的话,界面创建器会提供一个默认的大小。你可以调整那个物体,并且界面创建器也会增添约束来维持它的大小。

为了进一步地微调布局,你可以使用属性检查工具(Attributes inspector)来修改栈视图的属性。例如,以下的例子就使用了一个8个点位的间隔和一个等距填充(Fills Equally)的分布。

关于栈视图的布局,同样也是基于已经排列好的视图的关于内容环绕性和压缩性的优先级。你可以使用大小检查工具(Size inspector)来修改这些内容。 注意: 通过直接向排列好的视图增添约束,你可以进一步地调整布局;然而,你需要避免任何可能的冲突:作为一个一般性的经验原则,如果一个视图的大小在一个给定的数量级上会默认返回到它固有的内容大小,那么你就可以在那个数量级上安全地增加约束。想要获取更多的关于约束冲突的信息,请看不可满足的约束(Unsatisfiable Layout)一节。

另外,你可以将栈视图嵌入其他的栈视图中来建立更加复杂的布局。

总的来说,尽可能多地使用栈视图来管理你的布局。仅有当你无法仅使用栈视图来达成你的目的是,才去诉诸创建约束。

想要更多关于使用栈视图的信息,请见UIStackView类相关(UIStackView Class Reference)或是NSStackView类相关(NSStackView Class Reference)章节。 注意: 尽管创造性地使用嵌入栈视图能够建成复杂的用户界面,你并不能完全地避免对于约束的需求。在最低的限度上,你总是会需要一些约束来定义最外围的栈的位置(或者也可能是大小)。