如何改变行高?



使用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
}

相关内容

  • 没有找到相关文章

最新更新