我正在开发一个登录应用程序,登录后列出了类别。在每个类别下都有一些水平列出的项目。事情是登录后,主页面出现,一切都列出来了。当您单击一个项目时,它会进入详细屏幕,但是当您尝试返回时,它只会崩溃。我发现了这个流程为什么我的 SwiftUI 应用程序在“NavigationView”中的“navigationBarItems”内放置“NavigationLink”后向后导航时会崩溃?但我无法解决我的问题。由于我的项目变得复杂,我只想在swiftui中练习导航并创建了一个新项目。顺便说一下,我下载了最新的 xcode 版本 11.3。我写了一个简单的代码如下:
NavigationView{
NavigationLink(destination: Test()) {
Text("Show Detail View")
}
.navigationBarTitle("title1")
Run Code Online (Sandbox Code Playgroud)
而 Test() 视图如下:
import SwiftUI
struct Test: View {
var body: some View {
Text("Hello, World!")
}
}
struct Test_Previews: PreviewProvider {
static var previews: some View {
Test()
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这非常简单。我也在互联网上尝试过类似的例子,但它并没有像它想象的那样工作。当我运行该项目时,我单击导航链接并导航到 Test() 视图。然后我点击后退按钮,它导航到主页。但是,当我第二次单击导航链接时,没有任何反应。导航链接只工作一次,之后什么也没有发生。它不导航,也不抛出任何错误。我是 swiftui 的新手,除了导航之外,一切都很棒。我在互联网上尝试了很多示例和建议的解决方案,但似乎没有任何解决方案可以解决我的问题。
以最基本的示例应用程序为例,其中有两个屏幕NavigationView:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination: SubView()) {
Text("Go to screen 2")
}
}
.navigationBarTitle("Screen 1", displayMode: .inline)
}
}
}
struct SubView: View {
var body: some View {
Text("Hello, World!")
.navigationBarTitle("Screen 2", displayMode: .inline)
}
}
Run Code Online (Sandbox Code Playgroud)
如果您转到屏幕 2 并按后退按钮返回屏幕 1,SubView则永远不会释放。如果你来回多次,就会有多个SubView活着的实例。这感觉像是一个巨大的问题/内存泄漏,默认情况下它的行为看起来很奇怪。有解决方法吗?
我的 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")
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过导航栏返回时,Foo我遇到了崩溃:Tried to pop to a view controller that doesn't …