UIStackView 约束的问题

Problems with UIStackView constraints

我有一个水平堆栈视图,左侧是一个空的 UIView,右侧是一个标签。在故事板生成器中,它看起来很完美(只看绿色行):

然而,当我 运行 Sim 或设备上的应用程序时,颜色视图只是折叠并消失:

我将堆栈视图设置为居中对齐和按比例分布。

如果我给颜色视图设置宽度,它在 Sim/device 中运行良好,但是我在界面构建器中收到警告,这让我很烦。我认为有更正确的方法,但我不知道那是什么。设置宽度警告:

它只允许我删除width=50(我输入的那个)。它不允许我删除 width=0(不是我设置的,似乎是默认设置)。

有人有什么想法吗?

首先,您设置一个比例分布,它告诉堆栈视图:"Hey stackview, lay-out the views proportional"。然后,你设置一个固定的宽度,所以你说:"Hey stackview, give this a ... width"。两者不能并存,因为它们是不同的。

要么创建 2 个堆栈视图,要么在堆栈视图中添加一个 UIView,并使该图像与其父 UIView 成比例。

所以:

-Stackview
 -UIView
  -Image proportional to UIView
  -Label proportional to UIView
 -UIView
  -Image pro...
  -label...
 -UIView
  -Image...
  -label...

并将您的 StackView 设置为 "Fill equally" 以使用这种方式。

使用 StackViews

一种有效的方法是将标签旁边的颜色条设为图像并使用 UIImageView 代替。然后 StackView 将认为 UIImageView 有内容而不压缩它。但这显然会花费更多的资源。另请注意,用于条带的图像必须具有相同的大小,否则 StackView 也会将它们压缩为不同的屏幕大小。

另一种方法是将 StackView 的 Distribution 属性 设置为 Fill Equally 这将使条带和标签各占一半 space。它可以工作,但可能无法提供您正在寻找的视觉效果。

备选方案

根据提供的信息量,我认为不需要使用 StackViews。您可以改为只应用给出条带和固定宽度的约束。

您也可以尝试使用自动布局,方法是将每个条带设置为固定到前导和顶部的距离,同时保持其大小(实际上是默认设置)和标签相同,除了还要固定其到尾随和宽度的距离与超级视图一起扩展。