【问题标题】:Can't do a Simple Navigate to View and back SwiftUI Navigation Bar Button无法进行简单的导航以查看和返回 SwiftUI 导航栏按钮
【发布时间】:2020-02-13 22:27:21
【问题描述】:

我正在尝试从一个视图到另一个视图进行简单的 SwiftUI 导航,然后使用 条形按钮项。我尝试了三种不同的方法来调用新视图。 在正文视图中使用 Button 有效,但在导航中使用 NavigationBarItems bar 以两种不同的方式失败。

这是开始视图:

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 中使用按钮,则可以转换到 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()
            }
        }
    }
}

我很困惑。任何指导将不胜感激。 Xcode 11.2 (11B44)、Catalina 10.15

【问题讨论】:

  • 工作正常,我正在运行相同版本的 Xcode。我可以从Call Modal Second View 按钮或右上角的SecondView 按钮一遍又一遍地打开和关闭SecondView,没有任何问题。取消注释代码并使用尾随 NavigationLink(..) 也可以正常工作。
  • 嗯。这真是令人困惑。我会尝试清理并重新启动 Xcode。谢谢。
  • 如果这意味着什么,我正在运行 iOS 13.1.2。
  • 我清理并重新启动了 Xcode 和模拟器,并且行为是相同的 - 但它确实适用于真实设备。该设备是 13.1.3。所以我想这只是一个模拟器错误。只是为了让它更奇怪,即使在模拟器中,如果我向下滑动以关闭 SecondView(而不是使用关闭按钮),那么导航按钮也每次都有效。猜猜我现在一直在使用设备。
  • 我注意到一些奇怪的怪癖,比如模拟器与设备的行为略有不同。我建议您在通过错误报告遇到这些问题时提出这些问题 - developer.apple.com/bug-reporting

标签: xcode swiftui


【解决方案1】:

这对我来说仍然是一个问题,我在弹出框(模态)演示和通过NavigationLinknavigationBarItems 中推送第二个控制器时遇到了同样的问题。

这是一个非常严重的错误。它正常工作的唯一方法是NavigationLinkNavigationView 内容中而不是navigationBarItems

这是一个真正的突破,因为NavigationBar 按钮应该以这种方式工作。

【讨论】:

    【解决方案2】:

    我今天将 Xcode 更新到 11.2 时遇到了这个问题。根据this post,这似乎是 13.2 的一个错误。我在我的实际 iPhone X 上对其进行了测试,它仍在运行 13.1.2,它在那里工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多