TabView嵌套NavigationStack切换标签时过渡动画异常求助
方案1:将NavigationStack移至TabView外部
当标签页不需要独立导航层级时,让整个TabView共享一个导航栈,避免每个标签页的导航栏重复布局导致的动画冲突。
修改后的代码:
@main struct TabBarIssueApp: App { var body: some Scene { WindowGroup { NavigationStack { TabView { Text("One") .navigationTitle("One") .tabItem { Label("One", systemImage: "location") } Text("Two") .navigationTitle("Two") .tabItem { Label("Two", systemImage: "magnifyingglass") } } } } } }
方案2:强制导航栏保持可见(保留独立NavigationStack)
如果每个标签页需要独立的导航栈,可通过强制导航栏背景始终可见,消除切换时的布局波动。
修改后的代码:
@main struct TabBarIssueApp: App { var body: some Scene { WindowGroup { TabView { NavigationStack { Text("One") .navigationTitle("One") .toolbarBackground(.visible, for: .navigationBar) .toolbarTitleDisplayMode(.large) } .tabItem { Label("One", systemImage: "location") } NavigationStack { Text("Two") .navigationTitle("Two") .toolbarBackground(.visible, for: .navigationBar) .toolbarTitleDisplayMode(.large) } .tabItem { Label("Two", systemImage: "magnifyingglass") } } } } }
该方法通过固定导航栏的可见状态,避免标签切换时系统重新计算导航栏布局,从而消除跳动现象。
内容的提问来源于stack exchange,提问作者Joe Thomson
相关产品推荐
相关产品推荐

