HTML-类似于 SwiftUI 视图中的 table 布局(即自动调整 table 单元格)?

HTML-like table layout (i.e. auto-resizing table cells) in SwiftUI View?

我想在我的 SwiftUI 视图中以某种方式呈现 table 文本单元格,每个单元格都会自动调整大小以适应文本。所以我这样做了:

    import SwiftUI

    struct ContentView: View {

        let words = "Die Würde des Menschen ist unantastbar. Sie zu achten und zu schützen ist Verpflichtung aller staatlichen Gewalt.".split(separator: " ")

        let columns = [
            GridItem(.flexible()),
            GridItem(.flexible()),
            GridItem(.flexible()),
            GridItem(.flexible()),
            GridItem(.flexible()),
        ]

       var body: some View {
           HStack{
               Spacer()
               LazyVGrid(columns: columns, spacing: 10) {
                   ForEach(words.indices, id: \.self) { idx in
                       HStack{
                           Text(words[idx])
                           Spacer()
                       }
                   }
               }
               Spacer()
           }.padding().frame(width:600)
       }
    }

但是,列以固定宽度和大量空白呈现。 (我不理解这种情况下的“灵活”。)我希望看到类似 HTML-table 的行为,即列不应比最宽的元素宽。

GridItem(.flexible()) 为所有单元格提供灵活但相同的宽度。好像您正在寻找灵活的宽度。最简单的方法是跳过 LazyVGrid 并只使用 HStackVStack,它们根据内容调整自己的大小:

    var body: some View {
        
        HStack {
            ForEach(0..<5) { col in
                VStack(alignment: .leading) {
                    ForEach(0..<4) { row in
                        let index = row*5 + col
                        if index < words.count {
                            Text(words[index])
                        } else {
                            Text("")
                        }
                    }
                }
            }
        }
        .padding()
        .frame(width:600)
    }