如何安排 UIStackViews?

How to arrange UIStackViews?

我正在开始一个向上支持 iOS9 的新项目,在查看了 Apple 的 constraint guidelines 之后,他们似乎建议尽可能使用 StackViews。在阅读了几篇文章和苹果文档后,我对如何创建它们及其好处有了基本的了解,但我仍然不确定何时不使用它们以及如何安排它们。

例如在下面的视图中我应该使用:

  1. 垂直轴上的一个大 StackView 覆盖整个超级视图。
  2. 三个具有固定约束的 StackViews 将它们固定到彼此和超级视图。
  3. 一个覆盖整个超级视图的大 StackView,其中包含三个堆栈视图
  4. 没有 StackViews,这个视图不合适

一般来说,我如何决定堆栈视图的布局方式以及是否使用它们?

我有一个问题,看不到你的截图,但我有一些观点可以帮助你做出决定:

  • 对所有线性排列的视图使用堆栈视图
  • 我更喜欢将根堆栈视图设置为完全包含没有空格的内容的大小(因此仅当内容大小时才将其限制为超级视图大小)
  • 堆栈视图使用自动布局来确定它的子视图的大小,因此您应该验证您的子视图确实告诉他们最合适的大小 - 也许通过使用 intrinsicContentSize() [仅在需要时!](小心它)
  • 您可以在界面生成器中练习堆栈视图,尝试更改堆栈视图属性,隐藏子视图(使用隐藏 属性),并玩弄约束,太棒了!

祝你好运=] 玩得开心

我开始越来越多地使用堆栈视图,尤其是自 Xcode 8.x 以来。您添加的每个堆栈视图都会为您添加一些自动布局约束(视图中 3 个垂直堆叠的标签可能需要 9 个约束,对于堆栈视图可能只有 3 个)

如果所有元素都在垂直堆栈视图中,则您不太可能需要将一个嵌入另一个 - 当水平元素嵌入垂直元素时通常会这样做,反之亦然。所以在上面的例子中,我将从一个大的堆栈视图开始。

在 Xcode 7.x 中存在 UILabel 的固有大小未正确计算的问题。在这些情况下,您可以在尺寸检查器中为每个标签设置占位符固有尺寸。

抛开这个问题,开始堆叠吧!