在 SwiftUI 中获取分组列表中的视图大小

Get View Size inside Grouped List in SwiftUI

我目前正在使用 ListGroupedListStyle(),以及 .regular horizontalSizeClass(例如横向模式下的 iPad),这种样式的列表会自动为每个部分创建一些填充,如下所示:

struct ListView: View {
    var body: some View {
        List {
            Section {
                Text("One")
                Text("Two")
                Text("Three")
            }
        }.listStyle(GroupedListStyle())
    }
}

太好了,我想要这个。但是因为我需要在 固定宽度 的行中显示一些元素,所以我需要知道列表中行的实际宽度。

我试过用 GeometryReader 包装列表,但由于整个 Section.

周围的填充,宽度与行的宽度不匹配
struct ListView: View {
    var body: some View {
        GeometryReader { geometry in
             List {
                Section {
                    Text("One")  // <-- geometry.size.width != Text.width
                    Text("Two")
                    Text("Three")
                }
             }.listStyle(GroupedListStyle())
        }
    }
}

所以我尝试使用 PreferenceKey 方法 GeometryReader 放在行的 listRowBackground 修饰符中,但是 该值永远不会更新.

有没有一种方法可以获取父级的大小,而无需在父级周围使用 GeometryReader(因为它在 List 上很麻烦,需要指定 Height 和 Width 才能正常工作) ?

我不得不诉诸 UITableView 风格 .insetGrouped,用 Representable 实现并使用 属性 layoutMargins此大小 class.

中水平边距的大小