SwiftUI View Content Layout unerwartet Pop / Sprünge auf erscheinen?


16

Wenn Sie mit einem Formular oder einer Liste (gruppiert) zu einer neuen Ansicht navigieren, wird der Inhalt etwa ein Viertel des unteren Randes des Titels der Navigationsansicht angezeigt und etwa eine halbe Sekunde später an der richtigen Stelle "eingeblendet". Sehr hässlich. Sie sind sich nicht sicher, ob dies ein SwiftUI-Fehler ist oder ob ich etwas falsch strukturiere?

Ich habe dies sowohl auf dem Simulator als auch auf dem Gerät mit den gleichen Ergebnissen getestet.

Ich denke, es hat etwas mit dem Umgang mit Navigationslinks zu tun? Jeder Navigationslink ruft in seiner Zielansicht init () auf, wenn ContentView angezeigt wird. Für mich macht dies keinen Sinn. Sollte das Ziel init () nicht nur in dem Moment aufgerufen werden, in dem ein Benutzer tatsächlich auf den Navigationslink klickt?

Ich habe dies auch mit einem Blatt versucht und das Problem besteht nicht mit Blättern, nur wenn Navigationslinks mit Formularen oder Listen verwendet werden, die als gruppiert gestaltet sind.

Code aus einer brandneuen Single View-Anwendung:

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

}

Antworten:


10

Das Bereitstellen eines Abschnitts mit einem Kopfzeilentext behebt das Problem, auch wenn der Text leer ist. Dies lässt jedoch eine Lücke zwischen dem Navigationstitel und der ersten Zeile.

Funktioniert mit Formularen und Listen, die als gruppiert gestaltet sind.

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}

Versuchte beide Lösungen in diesem Beitrag, immer noch passiert. Was könnte sonst noch los sein? So seltsam.
Lkabo

0

Ich hatte dieses Problem mit einer Liste, die über NavigationLink aus einer GroupedListStyle-Liste übertragen wurde. Wenn Sie dies tun, scheint SwiftUI die Push-Liste auch als gruppiert zu betrachten. In diesem Fall sollte nur das Zurücksetzen des listStyle funktionieren:

List { ... }.listStyle(DefaultListStyle())
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.