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))
    }
}