如何使用 AutoLayout 使我的 UIImage 的高度与我的 UILabel 的固有高度相同?

Posted

技术标签:

【中文标题】如何使用 AutoLayout 使我的 UIImage 的高度与我的 UILabel 的固有高度相同?【英文标题】:How can I make my UIImage the same height as the intrinsic height of my UILabel using AutoLayout? 【发布时间】:2017-08-05 12:11:12 【问题描述】:

我想使用水平堆栈视图将图标 (UIImage) 放置在标签 (UILabel) 旁边。我想要它,所以图标始终与标签的文本高度相同。如果用户增加系统字体大小,我希望图标相应调整以保持相同的高度。

注意带有图标和标签的堆栈视图位于 UITableViewCell 中。

我该怎么做?

到目前为止,我有以下 AutoLayout 设置:

UITableViewCell 高度设置为默认值。 堆栈视图受限于 UITableViewCell 的大小。 堆栈视图对齐和分布设置为填充。 UILabel 内容拥抱优先级 250 和抗压缩优先级 750。 UIImageView 内容拥抱优先级 250 和抗压缩优先级 749。 UIImageView 纵横比 1:1。 UIImageView 与 UILabel 高度相同。

我得到的是:

不用说,我尝试了许多不同的组合,但这是我得到的最好的。我希望 UIImageView(Facebook 徽标)与“某些文本”的高度相同。

我想要这个:

【问题讨论】:

也许UIImageView和UILabel实际上是相同的高度,如果label与StackView的高度相等(即等于Cell)。 UILabel 垂直居中文本。 是的,UILabel 最终拉伸到与 UIImageView 相同的高度。我将 UILabel 的背景着色为灰色以显示这一点。我希望 UILabel 保持其固有高度。 您需要以编程方式进行,这里有一篇关于如何根据 UILabel 显示的文本和必须显示的宽度知道其高度的帖子:***.com/questions/27374612/… 【参考方案1】:

您的标签随着图像的增长而增长,但您想要相反的行为。您可以通过内容压缩阻力优先级和内容拥抱优先级来控制它。您应该将标签的垂直内容拥抱优先级设置为必需。这将不允许标签变得大于其自然高度。将图像的垂直内容压缩阻力优先级设置为低,可能还有它的水平吊坠,这将允许图像缩小到标签高度。

【讨论】:

那行得通。我将标签的垂直抗压优先级设置为 1000,图像的抗压优先级设置为 250。谢谢! 非常感谢。这太棒了! + 10 如果可以的话。

以上是关于如何使用 AutoLayout 使我的 UIImage 的高度与我的 UILabel 的固有高度相同?的主要内容,如果未能解决你的问题,请参考以下文章

AutoLayout - 使用水平约束保持图像的比例(Swift Xcode 6)

动态调整 UITableViewCells 的大小

如何使用 Autolayout 在我的 UIScrollview 上设置约束?

如何使用 Autolayout 调整我的超级视图大小以匹配其子视图的大小?

如何使用 Autolayout 在不同设备上保持 UIView 比例?

如何使用水平滚动以编程方式执行 AutoLayout?