SwiftUI wyświetla układ zawartości niespodziewanie pojawia się / pojawia się?

16

Podczas nawigowania do nowego widoku z formularzem lub listą (pogrupowane) treść pojawia się około ćwierć drogi od dolnej części tytułu widoku nawigacji, a następnie „wyskakuje” w odpowiednie miejsce około pół sekundy później. Bardzo brzydki. Nie jesteś pewien, czy jest to błąd SwiftUI, czy coś źle konstruuję?

Przetestowałem to na symulatorze i urządzeniu z tymi samymi wynikami.

Myślę, że ma to coś wspólnego ze sposobem obsługi linków nawigacyjnych? Każde łącze nawigacyjne wywołuje init () w widoku docelowym, gdy pojawia się ContentView. Dla mnie nie ma to sensu, czy docelowa init () nie powinna być wywoływana tylko w momencie, gdy użytkownik kliknie link nawigacyjny?

Próbowałem tego również z arkuszem, a problem nie występuje z arkuszami, tylko przy użyciu łączy nawigacyjnych z formularzami lub listami w stylu zgrupowanym.

Kod z nowej aplikacji do pojedynczego widoku:

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
źródło

Odpowiedzi:

10

Udostępnienie sekcji z tekstem nagłówka rozwiązuje problem, nawet jeśli tekst jest pusty. Chociaż pozostawi to lukę między tytułem nawigacji a pierwszym rzędem.

Działa zarówno z formularzami, jak i listami w stylu zgrupowanym.

struct TestView: View {

    var body: some View {
        Form {
            Section(header: Text("")) {
                Text("Test View")
            }
        }
        .nvigationBarTitle("Test View")
    }
}
SybrSyn
źródło
Próbowałem obu rozwiązań w tym poście, wciąż się dzieje. Co jeszcze może się dziać? Bardzo dziwne.
Lkabo
0

Miałem ten problem z listą, która została wypchnięta przez NavigationLink z listy GroupedListStyle. Gdy to zrobisz, wydaje się, że SwiftUI również traktuje wypchniętą listę jako pogrupowaną. Wystarczy zresetować listStyle powinien działać w tym przypadku:

List { ... }.listStyle(DefaultListStyle())
Retendo
źródło