与其他内容一起放入 HStack 时,文本只有一行(SwiftUI 列表)

Posted

技术标签:

【中文标题】与其他内容一起放入 HStack 时,文本只有一行(SwiftUI 列表)【英文标题】:Text has only one line when put in HStack with something else (SwiftUI List) 【发布时间】:2019-09-08 01:23:51 【问题描述】:

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

这是我的代码:

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

这是没有 Rectangle 的样子:

还有矩形:

【问题讨论】:

您使用的是什么版本的 Xcode?我没有看到问题 【参考方案1】:

在 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)
        
    

【讨论】:

【参考方案2】:

SwiftUI 现在有一些错误,它就是其中之一,您可以查看 some discussion on this answer。

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

对于这种情况,您可以像这样在两个分隔符之间换行:

VStack 
    Spacer()

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

    Spacer()

【讨论】:

恐怕这对我来说会产生相同的结果。我已经用.layoutPriority() 试过了,结果也一样

以上是关于与其他内容一起放入 HStack 时,文本只有一行(SwiftUI 列表)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI HStack 文本未对齐

SwiftUI 用图像包装 HStack

SwiftUI 文本在 HStack 中超出屏幕

SwiftUI iOS 14 |在 HStack 中自动展开文本框和内容

嵌入在 VStack 中的 HStack 中的奇怪间距行为

是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?