SwiftUI 导航 link 后退按钮在预览中有效但在模拟器或设备中无效

SwiftUI navigation link back button working in preview but not in simulator or device

我正在尝试使用简单的导航视图,导航 link 到另一个视图。当 运行 启动应用程序并按下导航 link 时,它会将我带到新视图。

然而,当我在模拟器或设备上时,后退按钮不起作用,而在预览中它工作正常。

知道问题出在哪里吗?


import SwiftUI

struct HomeView: View {
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Detail View")) {
                    Text("Hello World")
                }
            }
            .navigationBarTitle("SwiftUI")
        }
    }
}

struct HomeView_Previews: PreviewProvider {
    static var previews: some View {
        HomeView()
    }
}

我认为问题可能是由于 HomeView 是 tabView 的一部分。以下代码来自 AppView.swift,当应用程序为 运行 时,它就是 运行(您可以在最底部看到该代码)。

我认为这是问题所在,因为当注释掉下面的代码时,应用程序运行正常。


HomeView()
.tabItem {
Image(systemName: "house.fill")
Text("Home")
}
.onTapGesture {
self.selectedTab = 2
}
.tag(2)
                    
@main
struct Skate_AppApp: App {
    var body: some Scene {
        WindowGroup {
            HomeView()
        }
    }
}

从你的代码我可以看出问题出在 onTapGesture,我从 self.selectedTab = 2 推测你想要获取用户选择的选项卡。

让我们用相同的概念稍微重构一下您的代码。

解决方案:删除 onTapGesture 并添加 onAppear.

    TabView {
        
        HomeView().tabItem {
                Image(systemName: "house.fill")
                Text("Home")
        }.onAppear{
            self.selectedTab = 2
        }.tag(2)
        
        AnotherView().tabItem {
                Image(systemName: "car.fill")
                Text("Login View")
        }.onAppear{
            self.selectedTab = 3
        }.tag(3)
        
    }

通过这个每当一个视图出现时,就意味着用户已经选择了它,onAppear将被调用,并且您的变量selectedTab将被更改。我希望这能回答你的问题。