web-dev-qa-db-fra.com

La liste dynamique SwiftUI avec sections ne se présente pas correctement

J'essaie de créer une simple liste dynamique regroupée en sections. (SwiftUI iOS13 Xcode11 beta 2)

Un exemple statique simple serait:

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")
            }
        }
    }
}

Cela affiche comme prévu une belle liste avec en-têtes et pieds de page de section

Mais quand j'essaie de le faire à partir d'une liste dynamique comme celle-ci:

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)
                }
            }
        }
    }
}

Le résultat est une liste avec seulement 3 lignes. L'en-tête Section, toutes les cellules de contenu et le pied de page sont combinés horizontalement en une seule ligne.

Qu'est-ce que je rate?

11
Bo Frese

Bien que les solutions ci-dessus fonctionnent pour les données statiques, je rencontre une situation différente. Dans mon cas, l'équivalent "mygroups" est vide lors de la composition de la liste. Dans le bloc .onAppear {}, je crée les groupes.

Une fois les groupes constitués, je mets à jour @State et la liste se bloque avec ce vieux message d'ami:

'NSInternalInconsistencyException', raison: 'Mise à jour invalide: nombre de sections invalide. Le nombre de sections contenues dans la vue tabulaire après la mise à jour (2) doit être égal au nombre de sections contenues dans la vue tabulaire avant la mise à jour (2), plus ou moins le nombre de sections insérées ou supprimées (2 insérées, 0 supprimé). "

Je suis passé d'un tableau vide à un avec deux sections. Je ne pense pas que la liste soit encore prête pour des changements dynamiques aussi complexes (sauf s'il existe une API que je n'ai pas encore trouvée).

Ce que je vais probablement faire, c'est essayer de le construire avant que la liste ne puisse le voir.

0
P. Ent

L'intégration de la liste dans un VStack a résolu le problème pour moi.

0
iOne