【问题标题】:How to arrange UIStackViews?如何安排 UIStackViews?
【发布时间】:2017-02-28 13:22:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios uistackview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 对于我上面的示例,我遇到的 StackViews 问题是每个视图之间的距离不相等。在我给出的设计中,第 2 和第 3 以及第 4 和第 5 视图之间的空间更大。
    • 如果需要添加额外的间距,你可以放下一个空的UIView,并设置它的高度约束
    • 如果目标是最小化约束,我认为这种观点可能不合适。我不再需要第 1/2、第 3/4、第 5/第 6 视图之间的三个约束,并且不需要占用堆栈视图宽度的集合视图的尾随/前导约束,但我必须添加两个新视图每个将需要 3 个约束(前导尾随、高度),并且 StackView 本身需要三个约束,以获得 3 个额外约束的净增益。
    • 如果视图具有相同的大小、间距或前导/尾随约束,我可以看到这会最小化我的约束,但由于所有这些东西都不同,这似乎增加了复杂性,而不是消除了它。
    【解决方案2】:

    我有一个问题,看不到您的屏幕截图,但我有几点可以帮助您做出决定:

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

    祝你好运=] 玩得开心

    【讨论】:

    • 将大小设置为内容而不是超级视图有什么好处?
    • 当视图是根视图的子视图,并且不能改变它的大小时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2017-09-19
    • 2016-08-03
    • 2016-01-09
    • 1970-01-01
    • 2012-12-18
    • 2021-08-05
    相关资源
    最近更新 更多