SwiftUI Table macOS 上的 rowHeight
SwiftUI Table rowHeight on macOS
寻找一些尝试使用 SwiftUI 在 macOS 上使用 Table
的建议。 Table
是在 macOS 12 中引入的,我尽我最大的努力不进入 AppKit 或复制任何现有功能 - 我似乎找不到 NSTableView
的 SwiftUI 版本的解决方案' s rowHeight
属性.
有一个 .tableStyle
修饰符,但只允许自定义插入和交替行样式。修改行视图中的框架没有生效,至少我试过的方法没有。
首先,我是否遗漏了一些明显的(或不明显的)东西,有办法做到这一点吗?底层的 AppKit 视图是一个 SwiftUITableView,它似乎继承了 NSTableView
。我可以在调试器中调整 rowHieght
,但只会影响 table 视图的背景。 其次 关于解决这个问题的方法的任何建议——除了使用 NSTableView 并包装在 NSViewRepresentable 中,或者使用一些 [= 操纵已建立的 NSView 层次结构之外=36=] 诡计?
一些省略的代码演示了 Table
的用法
struct ContentTable: View {
var items: [ContentItem]
@State var selection = Set<ContentItem.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("Name") {
Text([=11=].name)
.frame(height: 80) // Only way found to set height information
}.width(min: 200, ideal: 250)
TableColumn("Description", value: \.description)
} rows: {
ForEach(items) {
TableRow([=11=])
}
}
.tableStyle(.inset(alternatesRowBackgrounds: true))
}
}
这是我正在使用的 SF Symbols(左)和 SwiftUI Table 的并排图。两者都使用 inset/alternating 行样式。在演示方面,我想给这些行更多 space 呼吸。
我这样做的方法是在声明的 TableColumns 的内容中使用填充修饰符。
重要的部分是 table 将按所有列中的最低填充值调整行。
我不会尝试用 tableStyle 来处理这个问题。目前没有 public 配置。
重要的是要注意未声明的填充默认为 0。
struct ContentTable: View {
var items: [ContentItem]
@State var selection = Set<ContentItem.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("Name") {
Text([=10=].name).padding(.vertical, 8) // <--- THIS WILL TAKE PRECEDENCE.
}.width(min: 200, ideal: 250)
TableColumn("Description") {
Text("\([=10=].description)").padding(.vertical, 16) // <--- THIS WILL BE INEFFECTIVE.
}
} rows: {
ForEach(items) {
TableRow([=10=])
}
}
.tableStyle(.inset(alternatesRowBackgrounds: true))
}
}
寻找一些尝试使用 SwiftUI 在 macOS 上使用 Table
的建议。 Table
是在 macOS 12 中引入的,我尽我最大的努力不进入 AppKit 或复制任何现有功能 - 我似乎找不到 NSTableView
的 SwiftUI 版本的解决方案' s rowHeight
属性.
有一个 .tableStyle
修饰符,但只允许自定义插入和交替行样式。修改行视图中的框架没有生效,至少我试过的方法没有。
首先,我是否遗漏了一些明显的(或不明显的)东西,有办法做到这一点吗?底层的 AppKit 视图是一个 SwiftUITableView,它似乎继承了 NSTableView
。我可以在调试器中调整 rowHieght
,但只会影响 table 视图的背景。 其次 关于解决这个问题的方法的任何建议——除了使用 NSTableView 并包装在 NSViewRepresentable 中,或者使用一些 [= 操纵已建立的 NSView 层次结构之外=36=] 诡计?
一些省略的代码演示了 Table
的用法struct ContentTable: View {
var items: [ContentItem]
@State var selection = Set<ContentItem.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("Name") {
Text([=11=].name)
.frame(height: 80) // Only way found to set height information
}.width(min: 200, ideal: 250)
TableColumn("Description", value: \.description)
} rows: {
ForEach(items) {
TableRow([=11=])
}
}
.tableStyle(.inset(alternatesRowBackgrounds: true))
}
}
这是我正在使用的 SF Symbols(左)和 SwiftUI Table 的并排图。两者都使用 inset/alternating 行样式。在演示方面,我想给这些行更多 space 呼吸。
我这样做的方法是在声明的 TableColumns 的内容中使用填充修饰符。
重要的部分是 table 将按所有列中的最低填充值调整行。
我不会尝试用 tableStyle 来处理这个问题。目前没有 public 配置。
重要的是要注意未声明的填充默认为 0。
struct ContentTable: View {
var items: [ContentItem]
@State var selection = Set<ContentItem.ID>()
var body: some View {
Table(selection: $selection) {
TableColumn("Name") {
Text([=10=].name).padding(.vertical, 8) // <--- THIS WILL TAKE PRECEDENCE.
}.width(min: 200, ideal: 250)
TableColumn("Description") {
Text("\([=10=].description)").padding(.vertical, 16) // <--- THIS WILL BE INEFFECTIVE.
}
} rows: {
ForEach(items) {
TableRow([=10=])
}
}
.tableStyle(.inset(alternatesRowBackgrounds: true))
}
}