SwiftUI - 多行文本 macOS

3
如何在SwiftUI列表中显示具有多个换行的文本UI元素。
以下代码生成以下图像,我无法找到使其按预期工作的方法。
let test = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Donec enim diam vulputate ut pharetra. Sed turpis tincidunt id aliquet risus feugiat in. Interdum velit laoreet id donec ultrices tincidunt arcu non.  Lorem END"


var body: some View {
    List(){
        Text(test).lineLimit(nil)
        Divider()
        Text(test).fixedSize(horizontal: false, vertical: true)
        Divider()
        Text(test)
    }
}

.lineLimit(nil)无法工作


.fixedSize(horizontal: false, vertical: true)也无法正常工作。


已经使用Xcode 11.2 / iOS 13.2和Xcode 11.4 / iOS 13.4进行了测试 - 所有三个变体都可以正确地包装相同的文本。 - Asperi
“按预期”是什么意思? - user3441734
请使用ScrollView代替。 - user3441734
2个回答

3

更新:已修复!

使用Xcode 13.4 / macOS 12.4重新测试-Text可以正常工作,不需要下面的解决方法。

原文

好的,这里是针对macOS的(添加了标签以便更好地显示),如果需要List的性能等,也可以实现,而且没有任何硬编码。

demo

已在Xcode 11.4 / macOS 10.15.3上测试。

var body: some View {
    GeometryReader { gp in
        List {
            Text(self.test)
                .padding(.trailing)
                .frame(width: gp.size.width)
            Divider()
        }
    }
}

一如既往的好答案。 - davidev

1
你需要使用 ScrollView,而不是 List。
import SwiftUI

struct ContentView: View {
    let test = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Donec enim diam vulputate ut pharetra. Sed turpis tincidunt id aliquet risus feugiat in. Interdum velit laoreet id donec ultrices tincidunt arcu non.  Lorem END"


    var body: some View {
        ScrollView {
            Text(test).lineLimit(1).padding()
            Text(test).lineLimit(3).padding()
            Text(test).padding()
        }.frame(maxWidth: 400)
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接