我正在尝试使用条形按钮项从一个视图到另一个视图并返回一个简单的 SwiftUI 导航。我尝试了三种不同的方法来调用新视图。在 body 视图中使用 Button 有效,但在导航栏中使用 NavigationBarItems 以两种不同的方式失败。
这是开始视图:
struct ContentView: View {
@State private var showSecondView = false
var body: some View {
NavigationView {
VStack {
Text("This is the content view")
.navigationBarTitle("Nav Title")
//this works ONCE only:
.navigationBarItems(trailing: Button(action: {self.showSecondView.toggle()}) {
Text("SecondView")
})
//this always fails on return to contentview with error:
//Tried to pop to a view controller that doesn't exist
// .navigationBarItems(trailing:
// NavigationLink(destination: SecondView()) {
// Text("SecondNav")
// }
// )
//This always works:
Button(action: {self.showSecondView.toggle()} ) {
Text("Call Modal Second View")
}.padding()
Text(self.showSecondView ? "true" : "false")
}.sheet(isPresented: $showSecondView) {
SecondView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在 NavigationBarItems 中使用 NavigationLink,则显示 SecondView,但在返回 ContentView 时,它崩溃并显示错误:“试图弹出一个不存在的视图控制器”
如果我在 NavigationBarItems 中使用 Button,则到 SecondView 的转换将只进行一次。返回 ContentView 有效,但按钮不再起作用。有趣的是,如果采取的第一个操作是使用 Body 中的 Button,那么 NavigationBarItem 甚至一次都不起作用。
和简单的 SecondView:
struct SecondView: View {
@Environment(\.presentationMode) var presentation
var body: some View {
NavigationView {
VStack{
Text("This is the second view")
Button(action: { self.presentation.wrappedValue.dismiss()}) {
Text("Dismiss Modal")
}.padding()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我糊涂了。任何指导将不胜感激。Xcode 11.2 (11B44), Catalina 10.15
这对我来说仍然是一个问题,我在弹出窗口(模态)演示和通过NavigationLinkin推送第二个控制器时遇到同样的问题navigationBarItems。
这是一个非常严重的错误。它正确工作的唯一方法是当NavigationLink是NavigationView内容而不是时navigationBarItems。
这确实是一个突破,因为NavigationBar按钮应该以这种方式工作。
| 归档时间: |
|
| 查看次数: |
3289 次 |
| 最近记录: |