iOS Auto Layout-不使用约束布局(译)
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 距离。
![](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Art/IB_StackView_Simple_2x.png)
同时 stack view 也会根据子视图的排版与大小,去布局自身的大小,使自身紧贴子视图。你可以通过 Size 检查器去改变这些。
备注
如果你想更好的进行布局,你可以直接通过添加约束来排版子视图;而且,如果你想避免任何冲突,你首先要遵循这样一个原则:如果一个 view 的默认尺寸为其根据内容计算出的固有大小,你可以放心的在这个尺寸上面添加约束。关于约束冲突更多的信息,请看 Unsatisfiable Layouts 章节。
除此之外,你可以在 stack view 中嵌套新的 stack view 作为子视图,进行一些更复杂的布局。
![](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Art/IB_StackView_NestedStacks_2x.png)
一般情况下,你可以尽可能地通过 stack view 进行布局。除非当单用 stack view 无法满足你的需求时,在使用约束进行布局。
关于更多使用它 stack view 的信息,请查看 UIStackView Class Reference 或者 NSStackView Class Reference 章节。
备注
尽管通过使用嵌套 stack view 可以进行复杂的布局,但是你不能完全避免使用约束。至少你需要通过约束去设置最外层 stack view 的位置(可能还有大小)。
![](/uploads/Reward.png)