堆栈视图提供了一种简单的方法来利用 Auto Layout 的功能,而不会引入约束的复杂性。 单个堆栈视图定义用户界面元素的一行或一列。 堆栈视图根据其属性排列这些元素。
* 轴:(仅限 UIStackView)定义堆栈视图的方向,垂直或水平。
* 方向:(仅限于 NSStackView)定义堆栈视图的方向,垂直或水平。
* 分布:定义沿轴的视图布局。
* alignment:定义垂直于堆栈视图轴的视图布局。
* 间距:定义相邻视图之间的空间。
要使用堆栈视图,请在 Interface Builder 中将垂直或水平堆栈视图拖放到画布上。 然后拖出内容并将其放入堆栈。
如果对象具有内在内容大小,则它将以该大小出现在堆栈中。 如果它没有内部内容大小,Interface Builder 将提供默认大小。 可以调整对象的大小,并且 Interface Builder 添加约束来维护其大小。
要进一步微调布局,可以使用“属性”检查器修改堆栈视图的属性。 例如,以下示例使用8点间距和填充平均分布。
![](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Art/IB_StackView_Simple_2x.png =226x146)
堆栈视图还将其布局基于排列视图的 content-hugging 和 compression-resistance 优先级。 可以使用大小检查器修改这些。
> 提示
> 可以通过直接向排列的视图添加约束来进一步修改布局; 但是,希望避免任何可能的冲突:根据一般经验,如果视图的大小默认返回给定维度的内在内容大小,则可以安全地为该维度添加约束。 有关冲突约束的更多信息,请参阅 [Unsatisfiable Layouts](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ConflictingLayouts.html#//apple_ref/doc/uid/TP40010853-CH19-SW1) 。
另外,可以在其他堆栈视图内嵌套堆栈视图以构建更复杂的布局。![](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Art/IB_StackView_NestedStacks_2x.png =295x241)
通常,使用堆栈视图来管理尽可能多的布局。 只有当你无法单独实现堆栈视图时才能创建约束。
有关使用堆栈视图的更多信息,请参阅 [UIStackView Class Reference](https://developer.apple.com/documentation/uikit/uistackview) 或 [NSStackView Class Reference](https://developer.apple.com/documentation/appkit/nsstackview) 。
> 提示
> 虽然嵌套堆栈视图的创造性使用可能会产生复杂的用户界面,但无法完全避免需要约束。 至少,总是需要约束来定义最外层堆栈的位置(以及可能的大小)。
>原文地址
>[Auto Layout Without Constraints ](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/AutoLayoutWithoutConstraints.html#//apple_ref/doc/uid/TP40010853-CH8-SW1)