在SwiftUI中尝试弹出一个不存在的视图控制器

7

我在我的 SwiftUI 应用程序中进行普通导航时遇到了奇怪的崩溃。

我有一个简单的标签视图:

struct FFTabView: View {
    var body: some View {
        TabView {
            LibraryView2()
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarHidden(true)
        .navigationBarTitle("", displayMode: .inline)
    }
}

// MARK: -

struct LibraryView2: View {

    var body: some View {
        VStack {
            NavigationLink(destination: Foo()) {
                Text("go to foo")
            }
        }
        .tabItem {
            Image(systemName: "square.grid.2x2.fill")
            Text("Skill Library")
        }
    }

}

struct Foo: View {
    var body: some View {
        Text("foo view")
    }
}

当我从导航栏返回时,从Foo页面返回时,出现崩溃:Tried to pop to a view controller that doesn't exist

这是怎么回事?我找不到与SwiftUI相关的任何信息,所以想发帖问一下。谢谢。

1个回答

5

虽然您没有具体说明,但我假设您的FFTabView在某个地方被包含在NavigationView中。

因此,最终您的视图层次结构类似于

NavigationView {
    TabView {
        NavigationLink {
            ...
        }
    }
}

如果您重组视图层次结构,使其像这样:
TabView {
    NavigationView {
        NavigationLink {
            ...
        }
    }
}

程序没有崩溃。

编辑:我确认这与在Xcode 11.2引入的此答案中讨论的回归/错误相关。在Xcode 11.1中,您的原始代码运行正常。


啊!谢谢John。这正是我在寻找的东西。由于我正在进行原型设计,因此我删除了登录视图,因为还没有人需要登录,这使我能够将LibraryView2的内部包装在NavigationView中,从而解决了崩溃问题。 - Zack Shapiro
这个解决方案的问题在于一些应用程序布局需要顶部视图层次结构。我自己就有这样一个应用程序,切换到较低的层次结构会破坏子导航视图的动画效果,因为选项卡栏没有被隐藏。有人有什么想法可以修复这个崩溃错误,而不必从根本上改变应用程序结构吗? - eResourcesInc
@eResourcesInc 我和你有同样的问题。你找到解决方案了吗?如果你回答的话,能否标记我一下,那就太好了。 - Lukas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接