使用SwiftUI 3中引入的新表,如何更改行高?
struct ContentView: View {
@State private var items: [ItemModel] = Array(0...100).map { ItemModel(title: "item ($0)") }
@State private var selection = Set<ItemModel.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("title", value: .title)
} rows: {
ForEach(items) { item in
TableRow(item)
}
}
}
}
struct ItemModel: Identifiable {
let id = UUID()
let title: String
}
对于TableColumn
,只有width()
修饰符可用。但是对于TableRow
,我们不能指定高度。真的没有办法提供TableRow
的高度吗?
更新:这是macOS 12.x。我还没有测试过SwiftUI是如何升级到macOS 13.x的。
您可以在所有tablecolers的内容中使用填充修饰符设置高度。然后,你可以根据内容设置一些有限的样式(例如,font on Text)。
需要注意的是,行不会根据内容进行调整。
// For example:
struct ContentView: View {
@State private var items: [ItemModel] = Array(0...100).map { ItemModel(title: "item ($0)") }
@State private var selection = Set<ItemModel.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("title") {
Text("($0.title)").padding(.vertical, 16) // <--- HERE
}
} rows: {
ForEach(items) { item in
TableRow(item)
}
}
}
}
我终于找到了一个解决方案来改变SwiftUI表的行高,而不做任何妥协。通过更改环境变量.defaultMinListRowHeight
,可以很容易地控制行高。
与@Mykel提供的解决方案相比,这不需要对每个列应用填充,而且当表为空时显示的占位符行已经具有指定的高度。
struct ContentView: View {
@State private var items: [ItemModel] = Array(0...100).map { ItemModel(title: "item ($0)") }
@State private var selection = Set<ItemModel.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("title", value: .title)
} rows: {
ForEach(items) { item in
TableRow(item)
}
}
.environment(.defaultMinListRowHeight, 80)
}
}
struct ItemModel: Identifiable {
let id = UUID()
let title: String
}