मैं कर रहा हूँ एक परियोजना पर काम कर रहा है कि प्रयास करने के लिए वर्तमान और खारिज दर्शनों की संख्या में एक NavigationView का उपयोग राज्य और बाध्यकारी है । कारण है कि मैं कर रहा हूँ यह वहाँ है में एक बग @पर्यावरण(.presentationMode) वार presentaionMode: बाइंडिंग मॉडल. यह कारण अजीब व्यवहार. यह चर्चा इस पोस्ट में यहाँ.
नीचे दिए गए उदाहरण में तीन विचार कर रहे हैं कि उत्तरोत्तर पर लोड करने के लिए देखें. पहले दो ContentView करने के लिए NavView1 वर्तमान और पूरी तरह से खारिज. हालांकि, एक बार NavView2 भरी हुई है, बटन प्रयोग किया जाता है कि टॉगल करने के लिए राज्य के presentNavView2 समाप्त होता जोड़ने के एक और NavView2 देखने पर ढेर नहीं है और इसे खारिज के रूप में की उम्मीद है. किसी भी विचार के रूप में करने के लिए क्यों यह होगा?
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")
}
}