UIStackView约束的问题

时间:2017-07-24 08:35:21

标签: ios swift interface-builder ios10 uistackview

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

然而,当我在Sim或设备上运行应用程序时,颜色视图会崩溃并消失:

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

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

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

有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

首先,设置一个比例分布,它告诉stackview:“嘿stackview,布局视图比例”。然后,你设置一个固定的宽度,所以你说:“嘿stackview,给它一个...宽度”。两者都不能在一起,因为它们是不同的。

制作2个堆栈视图,或者将UIView添加到堆栈视图中,并使该图像与其父UIView成比例。

所以:

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

并将StackView设置为“平均填充”以使用此方式。

答案 1 :(得分:1)

使用StackViews

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

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

<强>替代

根据提供的信息量,我认为没有要求使用StackViews。您可以改为仅应用赋予条带和固定宽度的约束。

您还可以尝试使用自动布局,通过设置每个条带来固定距离前端和顶部的距离,同时保持其大小(实际上是默认设置)和标签相同,除了还将其距离固定到尾部和宽度到比例超级视图。