Stack view 提供了一种简单的方式进行自动布局,通过这种方式可以不用设置一些复杂的约束,而达到自动布局的效果。一个 stack view 定义了一行或者一列界面元素。stack view 通过以下这些属性去排版它的每个元素。

  • axis:(UIStackView only) 定义 stack view 的排布方向,是垂直排布还是水平排布.
  • orientation:(NSStackView only) 定义 stack view 的排布方向,是垂直排布还是水平排布.
  • distribution:定义了 stack view 中的 view 的排布方式.
  • alignment:定义了 stack view 中的 view 的对齐方式.
  • spacing:定义 stack view 中的 view 之间的间隔.

Stack view 使用起来很简单,使用 Interface Builder 拖拽一个垂直或水平排布的 stack view 到画布上.然后拖拽一些你要布局的内容到 stack view 中.

如果某个控件有固有大小,那么拖入 stack 之后它将保持固有大小。如果它没有固有大小,Interface Builder 会提供一个默认大小.你可以通过添加约束去改变它的大小.

为了更进一步地调整布局,你可以通过属性检查器去改变 stack view 的属性。例如,下面这个例子中通过设置属性,使每个 view 等大小排布,并且每个 view 之间保持 8-point 距离。



同时 stack view 也会根据子视图的排版与大小,去布局自身的大小,使自身紧贴子视图。你可以通过 Size 检查器去改变这些。

备注
如果你想更好的进行布局,你可以直接通过添加约束来排版子视图;而且,如果你想避免任何冲突,你首先要遵循这样一个原则:如果一个 view 的默认尺寸为其根据内容计算出的固有大小,你可以放心的在这个尺寸上面添加约束。关于约束冲突更多的信息,请看 Unsatisfiable Layouts 章节。

除此之外,你可以在 stack view 中嵌套新的 stack view 作为子视图,进行一些更复杂的布局。



一般情况下,你可以尽可能地通过 stack view 进行布局。除非当单用 stack view 无法满足你的需求时,在使用约束进行布局。

关于更多使用它 stack view 的信息,请查看 UIStackView Class Reference 或者 NSStackView Class Reference 章节。

备注
尽管通过使用嵌套 stack view 可以进行复杂的布局,但是你不能完全避免使用约束。至少你需要通过约束去设置最外层 stack view 的位置(可能还有大小)。