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

Posted

技术标签:

【中文标题】在 UIImageView 上设置顶部约束会导致 UILabel 固定高度【英文标题】:Setting top constraint on UIImageView causes UILabel to be fixed height 【发布时间】:2016-05-31 02:56:27 【问题描述】:

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

我有一个视图(垂直视图),上面的标签上有一个顶部约束。垂直视图包含一个视图(称为视图),我将其用作分隔线,从上到下居中,宽度为 1。分隔线的左侧是 UIImageView(左图像视图),其约束领先,顶部,底部等于超级视图,尾随等于视图。我想对分隔线右侧的 UIImageView 做同样的事情,但这是我的问题出现的地方。

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

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

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

【问题讨论】:

下面的答案有什么好运气吗? @thephatp 看看我下面的评论 【参考方案1】:

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

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

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

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

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

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

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

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

【讨论】:

您能否详细说明“确保垂直容器视图的压缩率低于标签”的含义?标题标签的水平和垂直内容拥抱优先级为 251,Hor 和 Ver 的内容压缩阻力优先级均为 750。垂直容器视图现在具有 750 水平和 250 垂直的内容压缩阻力优先级以及 Hor 和 Ver.250 的内容拥抱优先级。标签仍然仅限于 1 行文本。 @user2492566,在此处查看帖子:***.com/questions/15850417/…,了解有关压缩与拥抱的可靠信息。不过,根据你的数字,我认为你已经明白了。我将使用有关使标签增长的详细信息来更新我的答案。希望这可以帮助。告诉我。 非常感谢!您的解释以及您提供的链接帮助我解决了我的问题!

以上是关于在 UIImageView 上设置顶部约束会导致 UILabel 固定高度的主要内容,如果未能解决你的问题,请参考以下文章

UIImageview 在自动布局上调整大小

动画 UIImageView 高度约束空白

调整自动布局约束

带约束的 UIImageView 的 iOS 动画

使用 AutoLayout 缩放 UIImageView 以适应宽度

UIImageView 不尊重约束