✨NColumns
SwiftUI ⟩ Layout ⟩ LazyGrids ⟩ example ⟩
⬆️ 需要: view.watermark()
// 🌀 usage: `GridItem() * 5`
extension GridItem {
    static func * (item: GridItem, n: Int) -> [GridItem] {
        Array(repeating: item, count: n)
    }
}
struct ContentView: View {
    
    // ⭐ as many columns as possible
    let adaptiveColumns = [
        GridItem(.adaptive(minimum: 80))
    ]
    
    // ⭐ 5 columns (flexible)
    let nColumns = GridItem(.flexible()) * 5    // 🌀 GridItem extension
    
    // ⭐ first column width fixed
    let firstColFixed = [
        GridItem(.fixed(100)),
        GridItem(.flexible()),
    ]
    
    var body: some View {
        VStack {
            HStack {
                NColumns(columns: firstColFixed)
                    // 🌀 View + .watermark()
                    .watermark(fgColor: .black, bgColor: .gray){ 
                        Text("first column fixed") 
                    }
                NColumns(columns: nColumns)
                    .watermark(fgColor: .black, bgColor: .gray){ 
                        Text("5 columns") 
                    }
            }
            NColumns(columns: adaptiveColumns)
                .watermark(fgColor: .black, bgColor: .gray){ 
                    Text("adaptive") 
                }
        }
    }
}struct NColumns: View {
    
    let columns: [GridItem]
    
    var body: some View {
        ScrollView {
            // ⭐ use columns
            LazyVGrid(columns: columns, spacing: 20) {
                // ❓ how to show the border of each grid item?
                ForEach(1..<100) { 
                    Text("item \($0)")
                        .font(.caption)
                        .foregroundColor(.label2)
                        .padding([.horizontal])
                        .padding(.vertical, 6)
                        .border(Color.blue)        // text border
                }
            }
            .padding()
        }
        .frame(maxHeight: 300)
        .border(Color.pink)        // scroll view border
    }
}問:How to show the border of each grid item❓
Last updated
Was this helpful?