You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:39:02