Je suis en train de travailler sur un projet qui est d'essayer de les présenter et de rejeter les vues dans la fenêtre des éléments à l'aide de l'état et de liaison. La raison pour laquelle je fais cela est il y a un bug dans le @de l'Environnement(.presentationMode) var presentaionMode: Liaison de modèle. Elle provoque un comportement étrange. Il en parle dans ce post ici.
L'exemple ci-dessous a trois points de vue qui sont progressivement chargé sur la vue. Les deux premiers ContentView à NavView1 présent et rejeter parfaitement. Cependant, une fois que NavView2 est chargé, le bouton qui est utilisé pour basculer l'état de presentNavView2 finit par l'ajout d'un autre NavView2 vue sur la pile et ne pas les rejeter comme prévu. Une pensée pour laquelle ce serait?
ContentView
struct ContentView: View {
@State private var presentNavView1 = false
var body: some View {
NavigationView {
List {
NavigationLink(destination: NavView1(presentNavView1: self.$presentNavView1), isActive: self.$presentNavView1, label: {
Button(action: {
self.presentNavView1.toggle()
}, label: {
Text("To NavView1")
}) // Button
}) // NavigationLink
} // List
.navigationTitle("Home")
} // NavigationView
} // View
}
NavView1
struct NavView1: View {
@State private var presentNavView2 = false
@Binding var presentNavView1: Bool
var body: some View {
List {
NavigationLink(destination: NavView2(presentNavView2: self.$presentNavView2), isActive: self.$presentNavView2, label: {
Button(action: {
self.presentNavView2.toggle()
}, label: {
Text("To NavView2")
}) // Button
}) // NavigationLink
Button(action: {
self.presentNavView1.toggle()
}, label: {
Text("Back")
})
} // List
.navigationTitle("NavView1")
} // View
}
NavView2
struct NavView2: View {
@Binding var presentNavView2: Bool
var body: some View {
VStack {
Text("NavView2")
Button(action: {
self.presentNavView2.toggle()
}, label: {
Text("Back")
}) // Button
} // VStack
.navigationTitle("NavView2")
}
}