在UIImageView上设置顶部约束会导致UILabel为固定高度

时间:2016-05-31 02:56:28

标签: ios uiview uiimageview uilabel constraints

我遇到了这个奇怪的问题,我的约束导致UILabel(标题标签)是一个固定的高度,而不是根据文本动态改变高度。

我有一个视图(垂直视图),上面的标签上有一个顶部约束。垂直视图包含一个视图(称为视图),我将其用作分隔符,从上到下居中,宽度为1.分隔符左侧是UIImageView(左图像视图),约束前导,顶部,bottom等于superview,尾随等于View。我想对分隔符右侧的UIImageView执行完全相同的操作,但这是我的问题出现的地方。

如果我使用如下所示的固定高度,垂直视图上方的UILabel会动态地改变其高度,但这显然不是我希望右侧的UIImageView出现的方式。我希望它类似于分隔符左侧的UIImageView,具有相同的高度和宽度。

Figure 1 with fixed height

如果我将右边的UIImageView的顶部约束设置为超视图垂直视图,类似于分隔符左侧的UIImageView,则垂直视图上方的UILabel不再动态更改高度。 UILabel现在有一个固定的高度,我认为这是因为UILabel的高度> = 14。

Figure 2 with top constraint

如何正确设置约束,以便我可以将两个UIImageViews彼此相邻并且在垂直视图中包含相等和高度,并且仍然具有垂直视图上方的UILabel动态更改高度,具体取决于我设置UILabel的文本到?

1 个答案:

答案 0 :(得分:1)

在RightImageView上,你首先需要摆脱" Height = 50"约束。这是导致它变小的原因。

接下来,如果仅此一项不能解决问题,您是否可以尝试使用超视图为约束设置以下约束而不是(而是使其镜像为LeftImageView):

  • 左:前导分隔视图的间距
  • 顶部:将顶部边缘与LeftImageView对齐
  • 右:水平空间到superview(垂直容器视图)
  • 底部:将底边对齐到LeftImageView

这应该允许视图保持相同的高度和宽度(假设垂直容器视图的左/右边缘之间的距离相同,并且分隔符之间的距离相同)。

现在,确保分隔符宽度的大小约束设置为1而不是> = 1.另外,请确保垂直容器视图的压缩率低于Label。

最后一个注意事项 - 您的屏幕截图显示了IB在LeftImageView上显示的结果(带有黄色虚线框)。一个你正确更新你的约束,这个黄色框应该消失。

关于UILabel - 如果您希望动态增长,则需要执行以下操作:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];