TabView中NavigationLink返回触发tvOS应用崩溃如何解决
问题原因
tvOS 15 中 NavigationView 的默认行为与 iOS 不同,默认导航样式不采用栈式管理,按下遥控器菜单键时系统无法识别导航层级的 pop 需求,会直接触发应用退出逻辑,同时抛出你看到的 BSActionErrorDomain 错误。
解决方案
方案1:添加导航样式修饰符(适配tvOS 15+,改动最小)
给所有 NavigationView 显式添加 .navigationViewStyle(.stack) 修饰符,指定导航栈管理逻辑,和iOS默认行为对齐即可:
struct ContentView: View { var body: some View { TabView { NavigationView { NavigationLink(destination: Text("Subview")) { Text("Subview") } } .navigationViewStyle(.stack) .tabItem { Text("Main") } NavigationView { Text("Settings") } .navigationViewStyle(.stack) .tabItem { Text("Settings") } } } }
修改后进入子页面按菜单键会优先返回上一级,导航栈回到根页面后按菜单键才会退出应用。
方案2:使用NavigationStack(适配tvOS 16+,长期推荐)
如果你的应用最低支持版本可升级到tvOS 16,直接替换已废弃的NavigationView为NavigationStack,原生适配tvOS导航逻辑,无需额外添加修饰符:
struct ContentView: View { var body: some View { TabView { NavigationStack { NavigationLink(destination: Text("Subview")) { Text("Subview") } } .tabItem { Text("Main") } NavigationStack { Text("Settings") } .tabItem { Text("Settings") } } } }
内容的提问来源于stack exchange,提问作者Sammcb
相关产品推荐
相关产品推荐

