我正在尝试从一个视图到另一个视图进行简单的SwiftUI导航,然后使用 条形按钮项。我尝试了三种不同的方法来调用新视图。 在主体视图中使用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()
}
}
}
}
如果我在NavigationBarItems中使用NavigationLink,则会显示SecondView,但是 返回到ContentView时,它崩溃并显示以下错误:“试图弹出视图 不存在的控制器”
如果我在NavigationBarItems中使用Button,则可以过渡到SecondView 一次,只有一次。返回到ContentView可以,但是按钮不再起作用。 有趣的是,如果第一个动作是在主体中按下按钮, 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()
}
}
}
}
我很困惑。任何指导将不胜感激。 Xcode 11.2(11B44),Catalina 10.15
答案 0 :(得分:2)
这对我来说仍然是一个问题,我在弹出窗口(模态)演示中遇到了同样的问题,并通过navigationBarItems中的NavigationLink推送了Second控制器。
这是一个非常严重的错误。正常工作的唯一方法是当NavigationLink位于NavigationView内容而不是NavigationBarItems内部。
这确实是一个突破,因为NavigationBar按钮应该可以那样工作。
答案 1 :(得分:1)
我今天将Xcode更新为11.2时遇到了这个问题。根据{{3}},这似乎是与13.2有关的错误。我在仍在运行13.1.2的实际iPhone X上进行了测试,并且在那儿工作正常。