SwiftUI中TabView内NavigationLink返回主界面后异常问题咨询
问题说明
在iOS 16.1系统的iPhone 14 Pro模拟器、Xcode 14.1环境下,存在如下异常:TabView内部的NavigationLink在从跳转页面返回主界面时,无法保留原视图状态,但TabView外的普通NavigationLink则能正常保留状态。(截图表现为:点击TabView外的链接跳转返回后,主界面元素状态正常;点击TabView内的链接跳转返回后,TabView内的视图被重置,无法维持跳转前的状态)
复现代码
import SwiftUI @main struct ExempleApp: App { var body: some Scene { WindowGroup { NavigationView { ContentView() } } } } struct ContentView: View { var body: some View { VStack { NavigationLink() { Text("The page is retained after returning from the main screen.") } label: { Text("This works") } TabView() { VStack { NavigationLink() { Text("The page doesn't stay after returning from the main screen.") } label: { Text("This doesn't work") } } .tabItem { Image(systemName: "bookmark") } .tag(0) } } } }
结论:这是SwiftUI的版本Bug
这种行为不符合开发者预期——TabView内的NavigationLink理应和外部的NavigationLink遵循一致的状态保留逻辑。该问题是iOS 16.1版本中SwiftUI对TabView视图生命周期管理的异常导致:当NavigationLink跳转返回时,TabView内的子视图被意外重建,进而丢失状态。后续iOS 16.2及以上版本已修复此问题,建议升级系统或Xcode版本验证。
临时规避方案
若需在iOS 16.1环境下解决此问题,可调整视图层级,将TabView作为NavigationView的直接子视图:
struct ContentView: View { var body: some View { TabView() { NavigationView { VStack { NavigationLink() { Text("Now this works after returning!") } label: { Text("Fixed version") } } } .tabItem { Image(systemName: "bookmark") } .tag(0) } } }
内容的提问来源于stack exchange,提问作者pp253
相关产品推荐
相关产品推荐

