如何在 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
是可行的方法。您只需要确保正确设置某些约束和拥抱优先级以获得您想要的外观。如果我没理解错的话,我想这就是你想要的:
我将 label
和 imageView
嵌入到水平 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
我正在编写测验应用程序。问题显示在 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
是可行的方法。您只需要确保正确设置某些约束和拥抱优先级以获得您想要的外观。如果我没理解错的话,我想这就是你想要的:
我将 label
和 imageView
嵌入到水平 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