多行标签和带有 UIStackView 的图像

Posted

技术标签:

【中文标题】多行标签和带有 UIStackView 的图像【英文标题】:Multi Line Labels and an Image with UIStackView 【发布时间】:2019-01-03 19:27:36 【问题描述】:

我正在尝试查看是否可以轻松使用 UIStackView 创建多行标签并显示图像。

这是我目前的限制条件。

当我运行它时,我得到以下信息:

如果我删除了 imageview,那么多行就可以了。不知何故 UIImageView 的宽度和高度搞砸了一切。我做错了什么?

【问题讨论】:

您的堆栈视图是否水平并嵌入在 UITableView 单元格中,其中包含另一个嵌入的垂直堆栈视图?我认为当你下注时,底池中有很多额外的牌。我可能会尝试丢失第二个嵌套的垂直堆栈并计算单元格的高度。 是的。我有一个 UITableViewCell。在单元格内,我有一个父堆栈视图。在stackview里面我有另一个包含标签的垂直stackview。在父堆栈视图中,我也有 uiimageview。如果我松开垂直堆栈视图,那么 uilabels 将不会垂直对齐。 在我个人看来,这两个堆栈视图都是不必要的。我认为您可以通过布局约束完成您想要的并将您的子视图直接添加到单元格中。 是的!在没有 UIStackView 的情况下,我能够轻松地做到这一点。我只是想看看使用 UIStackView 是否更容易。我猜不是。 【参考方案1】:

StackView 不能很好地处理约束,因为它们有点破坏堆栈视图的目的。由于垂直内部stackView 位于水平stackView 内部,带有imageView。当您给imageView 硬约束时,为了满足这些约束并保持stackViews 的高度和宽度值与imageView 和内部stackView 相同,内部stackView 不能扩展,它的高度和你无法得到你想要的行为。因此,正如 cmets 中也提到的,最好在没有stackViews 的情况下实现您的设计。

PS:我并不是说 stackViews 不能与子视图中的约束一起使用。可以这样做,有时可以让程序员成功实现他们的目标,但由于与 stackView 中的约束有关的视图的约束冲突,您总是会收到调试器警告。

【讨论】:

【参考方案2】:

更改 imageView 的高度和宽度以提供正确的外观,并且不为 stackview 提供固定高度,仅提供顶部、底部、前导和尾随。

这就是它的样子

【讨论】:

以上是关于多行标签和带有 UIStackView 的图像的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UIStackView 与多行 UILabel

UIStackView 和多行标签?

UIStackView 中的多行标签

UIStackView 和截断的多行 UILabel

无法在 xcuitestcase 的 uitableviewcell 内的 uistackview 中找到带有图像的 uibutton

UITableViewCell 中带有多行标签的 UIStackView 高度不正确