SwiftUI afficher la mise en page du contenu de manière inattendue pop / sauts apparaissent?

16

Lors de la navigation vers une nouvelle vue avec un formulaire ou une liste (groupée), le contenu apparaît environ un quart du bas du titre de la vue de navigation, puis "apparaît" à l'emplacement correct environ une demi-seconde plus tard. Très laid. Vous ne savez pas s'il s'agit d'un bogue SwiftUI ou si je structure quelque chose de mal?

J'ai testé cela sur le simulateur et l'appareil avec les mêmes résultats.

Vous pensez que cela a quelque chose à voir avec la façon dont les liens de navigation sont traités? Chaque lien de navigation appelle l'init () sur sa vue de destination lorsque ContentView apparaît. Pour moi, cela n'a aucun sens, la destination init () ne devrait-elle pas être appelée uniquement lorsqu'un utilisateur clique sur le lien de navigation?

J'ai également essayé cela avec une feuille et le problème n'existe pas avec les feuilles, uniquement lors de l'utilisation de liens de navigation avec des formulaires ou des listes de style groupé.

Code d'une toute nouvelle application à vue unique:

struct ContentView: View {

    var body: some View {
        NavigationView {
            NavigationLink(destination: TestView()) {
                Text("Test Link")
            }
        .navigationBarTitle("Content View")
        }
    }

}

struct TestView: View {

    var body: some View {
        Form {
            Text("Test View")
        }
        .navigationBarTitle("Test View")
    }

}
SybrSyn
la source

Réponses:

10

Fournir une section avec un texte d'en-tête résout le problème, même si le texte est vide. Bien que cela laisse un écart entre le titre de navigation et la première ligne.

Fonctionne avec les formulaires et les listes stylisés comme groupés.

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}
SybrSyn
la source
1
J'ai essayé les deux solutions dans ce post, toujours en cours. Que pourrait-il se passer d'autre? Si étrange.
Lkabo
0

J'ai eu ce problème avec une liste qui a été poussée via NavigationLink à partir d'une liste GroupedListStyle. Lorsque vous faites cela, il semble que SwiftUI considère également la liste poussée comme groupée. La simple réinitialisation du listStyle devrait fonctionner dans ce cas:

List { ... }.listStyle(DefaultListStyle())
retendo
la source