Получить размер просмотра внутри сгруппированного списка в 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 вокруг родителя (так как это сложно в списке, и для правильной работы необходимо указать высоту и ширину)?


person riciloma    schedule 09.06.2020    source источник
comment
Чего именно нужно знать высоту? Элемент раздела или строки?   -  person Valentin Walter    schedule 10.06.2020
comment
Попробуйте использовать значение defaultMinListRowHeight Environment следующим образом: @Environment(\.defaultMinListRowHeight) var height   -  person Valentin Walter    schedule 10.06.2020
comment
Итак, вы хотите узнать ширину строки или ширину текста? Потому что это разная ширина. Ширина строки одинакова для всех строк в таблице. Ширина текста, конечно же, зависит от содержимого.   -  person Asperi    schedule 10.06.2020
comment
Мне нужно прочитать ширину строки.   -  person riciloma    schedule 10.06.2020


Ответы (1)


Мне пришлось прибегнуть к UITableView со стилем .insetGrouped, реализованным с Representable и использовать свойство layoutMargins, которое дает точно размер горизонтальных полей в этом классе размера.

person riciloma    schedule 15.06.2020