SwiftUI динамический список с разделами не размещается правильно - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь создать простой динамический список, сгруппированный по разделам. (SwiftUI iOS13 Xcode11 beta 2)

Простой статический пример:

struct StaticListView : View {
    var body: some View {
        List {
            Section(header: Text("Numbers"), footer: Text("...footer...")) {
                Text("1")
                Text("2")
                Text("3")
            }
            Section(header: Text("Letters"), footer: Text("...footer...")) {
                Text("a")
                Text("b")
                Text("c")
            }
        }
    }
}

Как и ожидалось, отображается хороший список с верхними и нижними колонтитулами разделов.

Но когда я пытаюсь сделать это из динамического списка, например:

struct TestData: Identifiable {
    var id = UUID()
    var title: String
    var items: [String]
}

struct ListView : View {
    let mygroups = [
        TestData(title: "Numbers", items: ["1","2","3"]),
        TestData(title: "Letters", items: ["A","B","C"]),
        TestData(title: "Symbols", items: ["€","%","&"])
    ]
    var body: some View {
        List (mygroups) { gr in
            Section(header: Text(gr.title),
                    footer: Text("...footer...") ) {
                ForEach(gr.items.identified(by: \.self)) { item in
                    Text(item)
                }
            }
        }
    }
}

Результатом является список только с 3 строками. Заголовок раздела, все ячейки содержимого и нижний колонтитул объединены по горизонтали в одну строку.

Чего мне не хватает?

1 Ответ

2 голосов
/ 20 июня 2019

Предоставление List набора элементов, по-видимому, приводит к неправильному восприятию Section как единого представления.

Возможно, вам следует подать радар для этого, но в то же время это даст вамповедение, которое вы ищете:

struct ListView : View {
    let mygroups = [
        TestData(title: "Numbers", items: ["1","2","3"]),
        TestData(title: "Letters", items: ["A","B","C"]),
        TestData(title: "Symbols", items: ["€","%","&"])
    ]

    var body: some View {
        List {
            ForEach(mygroups) { gr in
                Section(header: Text(gr.title),
                        footer: Text("...footer...") ) {
                            ForEach(gr.items.identified(by: \.self)) { item in
                                Text(item)
                            }
                }
            }
        }
    }
}

...