SwiftUI - 带有列标题的网格/table
SwiftUI - grid / table with column headings
我正在尝试实现基本上具有以下布局的设计:
所以我需要此 table 或网格视图的列标题。第二列不需要标题。
这似乎是 LazyVGrid 或 LazyHGrid 的工作,但是我似乎无法找到一个解决方案来整齐地包含这样的标题 - 这一切看起来有点老套。
想知道我是否缺少实现此目的的更好方法。我当然可以尝试在 HStack 中创建 VStack,但这似乎应该比这更智能地完成。
您可以在显示内容之前将 headers 传递到 LazyVGrid
:
struct Item: Identifiable {
let id = UUID()
var item: String
var description: String = "This is the item description"
var quantity: Int = 1
var price: Double = 0
}
struct ContentView: View {
let data = [
Item(item: "Image 1", quantity: 2, price: 1.99),
Item(item: "Image 2", quantity: 1, price: 3.99),
Item(item: "Image 3", quantity: 5, price: 9.99),
]
let columns = [
GridItem(.flexible(), alignment: .topLeading),
GridItem(.flexible(minimum: 150), alignment: .topLeading),
GridItem(.flexible(), alignment: .topLeading),
GridItem(.flexible(), alignment: .topLeading),
]
var body: some View {
LazyVGrid(columns: columns) {
// headers
Group {
Text("Item")
Text("")
Text("Qty")
Text("Price")
}
.font(.headline)
// content
ForEach(data) { item in
Text(item.item)
Text(item.description)
Text("\(item.quantity)")
Text("$\(item.price, specifier: "%.2f")")
}
}
.padding()
}
}
我正在尝试实现基本上具有以下布局的设计:
所以我需要此 table 或网格视图的列标题。第二列不需要标题。
这似乎是 LazyVGrid 或 LazyHGrid 的工作,但是我似乎无法找到一个解决方案来整齐地包含这样的标题 - 这一切看起来有点老套。
想知道我是否缺少实现此目的的更好方法。我当然可以尝试在 HStack 中创建 VStack,但这似乎应该比这更智能地完成。
您可以在显示内容之前将 headers 传递到 LazyVGrid
:
struct Item: Identifiable {
let id = UUID()
var item: String
var description: String = "This is the item description"
var quantity: Int = 1
var price: Double = 0
}
struct ContentView: View {
let data = [
Item(item: "Image 1", quantity: 2, price: 1.99),
Item(item: "Image 2", quantity: 1, price: 3.99),
Item(item: "Image 3", quantity: 5, price: 9.99),
]
let columns = [
GridItem(.flexible(), alignment: .topLeading),
GridItem(.flexible(minimum: 150), alignment: .topLeading),
GridItem(.flexible(), alignment: .topLeading),
GridItem(.flexible(), alignment: .topLeading),
]
var body: some View {
LazyVGrid(columns: columns) {
// headers
Group {
Text("Item")
Text("")
Text("Qty")
Text("Price")
}
.font(.headline)
// content
ForEach(data) { item in
Text(item.item)
Text(item.description)
Text("\(item.quantity)")
Text("$\(item.price, specifier: "%.2f")")
}
}
.padding()
}
}