3

我试图显示项目列表。每行都应在左侧包含一个特定颜色的条纹和一个标题。此标题有时超过一行,但仅显示为一行和“...”。当我删除条纹时,它显示为多行文本。我附上了代码和两张图片以供比较

这是我的代码:

HStack {
    Rectangle()
        .foregroundColor(poll.outcome ? .green : .red)
        .frame(width: 3)
    VStack {
        Text(poll.poll.title!).font(.headline)
            .lineLimit(2)
    }
}

这是没有 Rectangle 的样子: 没有矩形

并使用矩形: 没有矩形

4

2 回答 2

10

在 List 或 ScrollView 中,SwiftUI 引擎将压缩回文本区域。.lineLimit(x) 为您提供最大的行数,而不是最小值;) 为确保引擎不会收缩文本高度并达到最大限制,请添加 .fixedSize(horizo​​ntal: false, vertical: true) 作为如下图

HStack {
        Rectangle()
            .foregroundColor(.red)
            .frame(width: 3)
        VStack {
            Text("line1\nline2\nline3").font(.headline)
                .lineLimit(2)
                .multilineTextAlignment(.leading)
                .fixedSize(horizontal: false, vertical: true)
        }
    }
于 2019-09-08T22:05:50.210 回答
0

SwiftUI 现在有一些错误,它就是其中之一,您可以查看有关此答案的一些讨论。

虽然它适用于我的机器,但如果您在调整元素大小时遇到​​任何问题,您可以使用Spacers 作为解决方法,直到 Apple 修复所有 SwiftUI 错误。

对于这种情况,您可以将文本包装在两个分隔符之间,如下所示:

VStack {
    Spacer()

    Text("FirstLine\nSecondLine\nThirdLine")
    .font(.headline)
    .lineLimit(2)

    Spacer()
}
于 2019-09-08T05:28:30.450 回答