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

Setting top constraint on UIImageView causes UILabel to be fixed height

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

我有一个视图(垂直视图),其上方的标签具有顶部约束。垂直视图包含一个视图(称为视图),我将其用作分隔线,它从上到下居中,宽度为 1。分隔线的左侧是一个 UIImageView(左图像视图),其约束在顶部,顶部,bottom 等于 superview,trailing 等于 View。我想对分隔线右侧的 UIImageView 做完全相同的事情,但这是我的问题出现的地方。

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

如果我将右侧UIImageView的顶部约束设置为superview Vertical View,类似于分隔线左侧的UIImageView,Vertical View上方的UILabel不再动态改变高度。 UILabel 现在有一个固定的高度,我相信这是因为 UILabel 的高度 >= 14。

我如何才能正确设置约束,以便我可以让两个 UIImageView 彼此相邻且高度相同并包含在垂直视图中,并且仍然让垂直视图上方的 UILabel 根据我设置的文本动态更改高度UILabel 到?

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

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

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

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

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

最后一点——您的屏幕截图显示了 IB 在 LeftImageView 上向您显示的结果(带有黄色虚线框)。一旦你正确地更新了你的约束,这个黄色框就会消失。

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

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