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

时间:2020-06-09 20:00:35

标签: swiftui swiftui-list swiftui-environment

我当前使用的是ListGroupedListStyle()以及.regular horizontalSizeClass(例如,横向模式的iPad),这种样式的List会自动为每个部分创建填充,就像这样:

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

Sample Grouped List Style

太好了,我想要这个。但是由于我需要以固定的宽度显示行中的某些元素,因此必须知道列表中行的实际宽度。

我尝试用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())
        }
    }
}

因此,我尝试通过在行的GeometryReader修饰符中放置listRowBackground来使用PreferenceKey方法explained here,但该值从未更新

是否有一种获取父级大小的有效方法,而无需在父级周围使用GeometryReader(因为它在List上很细,需要指定Height和Width才能正常工作)? / p>

1 个答案:

答案 0 :(得分:0)

我不得不求助于UITableView风格的.insetGrouped,并用Representable来实现,并使用属性layoutMargins来提供水平边距的大小在这个尺寸的班上。