SwiftUI LazyGrid 动态列宽

Mat*_*ack 8 swiftui

如何使 Grid 项目宽度动态化,以便它采用文本的宽度?

使用下面的代码截断文本,考虑到可变文本长度,我希望所有文本都显示而不被截断。

struct ContentView: View {
    
    let data = ["O Menino","The Boy", "The Girl", "A Menina","Mae","Mother"]
    
    let layout = [
        GridItem(.adaptive(minimum:50))
        
    ]
    
    var body: some View {
       
        ScrollView{
            LazyVGrid(columns: layout, spacing: 20){
                ForEach(data, id: \.self){ item in
                    VStack{
                        Text(item).lineLimit(1)
                    }.background(Color.red)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Asp*_*eri 6

它是VGrid,它垂直增长填充列。在你的情况下它只是一列。

如果您想让所有这些内容适合屏幕,您需要增加网格列的数量,例如

let data = ["O Menino","The Boy", "The Girl", "A Menina","Mae","Mother"]
let layout = Array(repeating: GridItem(.adaptive(minimum:50)), count: 4)
Run Code Online (Sandbox Code Playgroud)

演示