1

我目前正在使用List带有 aGroupedListStyle()和 a 的 a .regular horizontalSizeClass(例如横向模式下的 iPad),这种样式的 List 会自动为每个部分创建一些填充,如下所示:

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

示例分组列表样式

这个很棒,我想要这个。但是由于我需要在行内以固定宽度显示一些元素,所以我需要知道 List 内行的实际宽度。

我尝试用 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 方法,将 aGeometryReader放在listRowBackground行的修饰符中,但该值永远不会更新

有没有一种工作方式来获取父级的大小,而不是 GeometryReader在父级周围使用 a (因为它在列表上很复杂,需要指定高度和宽度才能正常工作)?

4

1 回答 1

0

我不得不求助于 a UITableViewwith style .insetGrouped,用 a 实现Representable并使用了该属性layoutMargins,该属性准确地给出了这个尺寸类中水平边距的大小。

于 2020-06-15T15:33:27.590 回答