在 SwiftUI 中获取分组列表中的视图大小
Get View Size inside Grouped List in SwiftUI
我目前正在使用 List
和 GroupedListStyle()
,以及 .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.
中水平边距的大小
我目前正在使用 List
和 GroupedListStyle()
,以及 .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.