堆棧視圖提供了一種簡單的方法來利用 Auto Layout 的功能,而不會引入約束的復雜性。 單個堆棧視圖定義用戶界面元素的一行或一列。 堆棧視圖根據其屬性排列這些元素。
* 軸:(僅限 UIStackView)定義堆棧視圖的方向,垂直或水平。
* 方向:(僅限于 NSStackView)定義堆棧視圖的方向,垂直或水平。
* 分布:定義沿軸的視圖布局。
* alignment:定義垂直于堆棧視圖軸的視圖布局。
* 間距:定義相鄰視圖之間的空間。
要使用堆棧視圖,請在 Interface Builder 中將垂直或水平堆棧視圖拖放到畫布上。 然后拖出內容并將其放入堆棧。
如果對象具有內在內容大小,則它將以該大小出現在堆棧中。 如果它沒有內部內容大小,Interface Builder 將提供默認大小。 可以調整對象的大小,并且 Interface Builder 添加約束來維護其大小。
要進一步微調布局,可以使用“屬性”檢查器修改堆棧視圖的屬性。 例如,以下示例使用8點間距和填充平均分布。

堆棧視圖還將其布局基于排列視圖的 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) 。
另外,可以在其他堆棧視圖內嵌套堆棧視圖以構建更復雜的布局。
通常,使用堆棧視圖來管理盡可能多的布局。 只有當你無法單獨實現堆棧視圖時才能創建約束。
有關使用堆棧視圖的更多信息,請參閱 [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)