Ios 视图约束的问题

Ios 视图约束的问题,ios,swift,interface-builder,ios10,uistackview,Ios,Swift,Interface Builder,Ios10,Uistackview,我有一个水平堆栈视图,左侧为空UIView,右侧为标签。在storyboard builder中,它看起来非常完美,只需查看绿色行: 但是,当我在Sim卡或设备上运行应用程序时,颜色视图会折叠并消失: 我将堆栈视图设置为中心对齐和比例分布 如果我给颜色视图设置了一个宽度,它在Sim/设备中工作得很好,但是我在interface builder中得到了一个警告,这让我很恼火。我想有更正确的方法,但我不知道那是什么。设置宽度警告: 它只允许我删除我输入的宽度=50。它不允许我删除我未设置的width

我有一个水平堆栈视图,左侧为空UIView,右侧为标签。在storyboard builder中,它看起来非常完美,只需查看绿色行:

但是,当我在Sim卡或设备上运行应用程序时,颜色视图会折叠并消失:

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

如果我给颜色视图设置了一个宽度,它在Sim/设备中工作得很好,但是我在interface builder中得到了一个警告,这让我很恼火。我想有更正确的方法,但我不知道那是什么。设置宽度警告:

它只允许我删除我输入的宽度=50。它不允许我删除我未设置的width=0,这似乎是默认值


有人有什么想法吗?

首先,设置一个比例分布,告诉stackview:嘿,stackview,按比例排列视图。然后,你设置了一个固定的宽度,所以你说:嘿,stackview,给这个一个。。。宽度两者不能同时进行,因为它们是不同的

制作2个stackview,或者在stackview中添加一个UIView,并使该图像与其父UIView成比例

因此:


然后将StackView设置为均匀填充以使用此方法。

首先,设置比例分布,告诉StackView:嘿,StackView,按比例布置视图。然后,你设置了一个固定的宽度,所以你说:嘿,stackview,给这个一个。。。宽度两者不能同时进行,因为它们是不同的

制作2个stackview,或者在stackview中添加一个UIView,并使该图像与其父UIView成比例

因此:

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

使用StackView

一种有效的方法是将标签旁边的颜色条设置为图像,并改用UIImageView。然后,StVIEW将考虑UIIVIEVIEW有内容,而不压缩它。但这显然需要更多的资源。还要注意的是,用于条带的图像必须具有相同的大小,否则StackView也会在屏幕上将其压缩为不同的大小

另一种方法是将StackView的Distribution属性设置为均匀填充,这将为条带和标签提供每一半的空间。它会起作用,但可能无法提供您想要的视觉效果

替代品

从提供的信息量来看,我认为没有必要使用StackView。相反,您可以只应用约束来提供条带和固定宽度

您还可以尝试使用自动布局,方法是将每个条带设置为固定到前导和顶部的距离,同时保持其大小实际默认设置和标签相同,但也固定到尾随的距离和宽度以使用superview进行缩放。

使用StackView

一种有效的方法是将标签旁边的颜色条设置为图像,并改用UIImageView。然后,StVIEW将考虑UIIVIEVIEW有内容,而不压缩它。但这显然需要更多的资源。还要注意的是,用于条带的图像必须具有相同的大小,否则StackView也会在屏幕上将其压缩为不同的大小

另一种方法是将StackView的Distribution属性设置为均匀填充,这将为条带和标签提供每一半的空间。它会起作用,但可能无法提供您想要的视觉效果

替代品

从提供的信息量来看,我认为没有必要使用StackView。相反,您可以只应用约束来提供条带和固定宽度


您也可以尝试使用自动布局,将每个条带设置为固定到前导和顶部的距离,同时保持其大小实际默认设置和标签相同,但也将其到尾随的距离和宽度固定到使用superview进行缩放。

设置宽度时,我不会太担心错误,stackview希望控制其子视图的可能宽度,因此,除非该视图设置了物理宽度,甚至可能设置了高度,否则堆栈视图不会在其子布局中为其分配任何空间。设置宽度时,我不会太担心错误,stackview希望控制其子视图的可能宽度,因此,除非该视图设置了物理宽度,甚至可能设置了高度,否则堆栈视图不会在其子布局中为其分配任何空间。感谢您解释为什么会发生冲突,现在我更了解我的问题。虽然您的解决方案很好,但我认为@Ben Ong说我真的不需要在这里使用堆栈视图可能是正确的。在这种情况下没有任何优势,我不完全确定我为什么走这条路线@国泰航空对此没有StackViews?我认为它完全符合您想要使用的堆栈视图,但这是您的选择…在我的例子中,堆栈视图并不是我认为您描述的垂直视图,我实际上使用了3个水平堆栈视图,每行一个。P
如果我使用一个垂直的堆栈视图,并像你上面写的那样实现它,这将是最合适的设计吗?@cathalo我不知道。您应该尝试我的方法,在stackview中使用间距:5。告诉我是怎么回事。1个stackview,3个uiview,其中的标签和图像在uiview中。感谢您解释冲突发生的原因,现在我更了解我的问题。虽然您的解决方案很好,但我认为@Ben Ong说我真的不需要在这里使用堆栈视图可能是正确的。在这种情况下没有任何优势,我不完全确定我为什么走这条路线@国泰航空对此没有StackViews?我认为它完全符合您想要使用的堆栈视图,但这是您的选择…在我的例子中,堆栈视图并不是我认为您描述的垂直视图,我实际上使用了3个水平堆栈视图,每行一个。也许,如果我使用一个垂直堆栈视图,并按照您上面所写的方式实现它,这将是最合适的设计?@cathalo我不知道这一点。您应该尝试我的方法,在stackview中使用间距:5。告诉我是怎么回事。1个stackview,3个uiview,标签和图像都在uiview中。是的,我试图避免使用图像。没问题,因为这个应用程序相对较小,所以我只是尽量避免使用那些没有实际用途的图像。我认为您的说法是正确的,在这种情况下不需要StackView。我想我会按照建议使用约束重新编写它。谢谢我要等到明天才能接受回答是的,我尽量避免使用图像。没问题,因为这个应用程序相对较小,所以我只是尽量避免使用那些没有实际用途的图像。我认为您的说法是正确的,在这种情况下不需要StackView。我想我会按照建议使用约束重新编写它。谢谢将留到明天接受答复
-Stackview
 -UIView
  -Image proportional to UIView
  -Label proportional to UIView
 -UIView
  -Image pro...
  -label...
 -UIView
  -Image...
  -label...