如何在 stackView 中定位 imageView 和标签,使我能够根据它们的状态调整它们的大小?

How can I position an imageView and a label in a stackView in a way that enables me to resize them according to their state?

我正在编写测验应用程序。问题显示在 tableView 中,其中有 2 种 cells.QuestionCell 和 MultipleChoiceCell.For 每个问题我有一个 QuestionCell 和 4 个 MultipleChoiceCells。

问题:

如果单元格由文本组成,这就是 multipleChoiceCells 的样子。

如果它们由照片组成,它们应该是这样的。

这是一个 multipleChoiceCell

即使选项至少包含照片,imageView 旁边的标签也会为每个问题显示 "A) or "B)" 或 "C)" 或 "D)"。 imageView 的宽度和高度也是 150.

如果该问题的 multipleChoiceCell 包含文本而没有图像,那么它应该使用 stackView 的所有宽度。

在过去的 8 小时内,无论是否使用 stackView,我都尝试过许多不同的方法,但找不到解决方案。我最接近的解决方案是不使用 stackView 但它在 iPhone 5s 屏幕尺寸上失败了。我上面显示的屏幕截图来自我的 iPhone X.

上的那个解决方案

我该如何解决这个问题?请给我一些启发...

编辑:当使用堆栈视图时,下面的问题 occurs.MultipleChoiceCell 有图像,但我仍然需要标签来显示 "A" "B" "C" 或 "D".无论我做什么,标签都会占用太多space。

我认为使用 UIStackView 是可行的方法。您只需要确保正确设置某些约束和拥抱优先级以获得您想要的外观。如果我没理解错的话,我想这就是你想要的:

我将 labelimageView 嵌入到水平 stackView 中,属性为:

stackView.alignment = .fill
stackView.distribution = .fill
imageView.contentMode = .left

此外,imageView 具有固定的高度限制 150,但没有宽度限制。 label 的水平拥抱优先级为 751。

(i) 如果您希望 label 中的文本填满整个宽度(但没有图像),请执行以下操作:

imageView.isHidden = true
label.numberOfLines = 0

(ii) 如果您需要短文本(例如 A) 等)和图像,请执行以下操作:

imageView.isHidden = false
label.numberOfLines = 1