В настоящее время я использую 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
вокруг родителя (так как это сложно в списке, и для правильной работы необходимо указать высоту и ширину)?
defaultMinListRowHeight
Environment следующим образом:@Environment(\.defaultMinListRowHeight) var height
- person Valentin Walter   schedule 10.06.2020