SwiftUI页面跳转后返回上层出现双层导航栏问题如何解决
问题根源
你实际在每个Tab标签页下都单独嵌套了一层NavigationView,而非全局只保留一个根导航栏,这是导致跳转返回后出现双层导航栏的核心原因。
解决步骤
步骤1:调整根视图的导航层级结构
把TabView整体套在唯一的根NavigationView 里,删除每个Tab项单独的NavigationView封装,修改后的ContentView代码如下:
import SwiftUI struct ContentView: View { @State private var activateNavigationLink: Bool = false // Required to navigate back to this view after deleting a trip var body: some View { NavigationView { // 全局唯一根导航视图 TabView { ViewTwo() .tabItem{ Image(systemName: "airplane") Text("Trips") } ViewThree(activateNavigationLink: $activateNavigationLink) .tabItem{ Image(systemName: "location.fill") Text("Nearby") } } } } }
步骤2:按需隐藏子页面导航栏(可选适配)
如果部分子页面不需要显示导航栏,可在对应页面的body结构末尾添加修饰符:
.navigationBarHidden(true) // iOS16+ 也可以使用 .toolbar(.hidden, for: .navigationBar)
步骤3:验证跳转效果
所有子页面的NavigationLink跳转默认会共享全局根导航栈,不会再额外生成导航栏,跳转返回后双层导航栏的问题就会消失。
补充适配建议
如果你的项目最低适配版本为iOS16及以上,更推荐使用NavigationStack替代NavigationView,导航栈的管控逻辑更清晰,不容易出现多层导航栏的异常问题。
内容的提问来源于stack exchange,提问作者Booysenberry
相关产品推荐
相关产品推荐

