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

标签 ios swift autolayout uistackview

我正在编写一个测验应用程序。问题显示在一个 tableView 中,其中有 2 种单元格。QuestionCell 和 MultipleChoiceCell。对于每个问题,我都有一个 QuestionCell 和 4 个 MultipleChoiceCell。

问题:

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

Text Question

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

Photo Question

这是一个 multipleChoiceCell

multipleChoiceCell

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

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

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

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

编辑:当使用堆栈 View 时,会出现以下问题。MultipleChoiceCell 有图像,但我仍然需要标签显示“A”、“B”、“C”或“D”。此外,无论如何标签都会占用太多空间我愿意。

Problem with StackView

最佳答案

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

enter image description here enter image description here

我将 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

关于ios - 如何在 stackView 中定位 imageView 和标签,使我能够根据它们的状态调整它们的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857332/

相关文章:

ios - 侧面菜单显示不正确

ios - 使用 RxSwift 和 Moya 处理重新认证

ios - 如何使用代码在 Swift iOS8 中模拟按钮按下

ios - 自动布局:为什么这些相同的约束不同?

iphone - 在墙上留言中标记 friend 所需的Facebook权限。

iOS SpriteKit - 创建多个 "floors"

ios - 在 iOS Facebook SDK 中获取并显示用户的个人资料图片

swift - 使用 for 循环时的预期声明

ios - 加载 View Controller 时的自动布局警告

ios - 由于 AutoLayout,iOS/Swift 中的动态行高折叠为 0