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

SwiftUI中.navigationTitle与.toolbar不显示问题求助

解决SwiftUI中NavigationStack导航栏与工具栏不显示的问题

问题分析

你遇到的导航标题(navigationTitle)和工具栏(toolbar)不显示的核心原因是iOS版本兼容性:NavigationStack是iOS 16及以上才引入的新API,如果项目部署目标低于iOS 16,或者预览模拟器选择了iOS 15及以下版本,NavigationStack会无法正常工作,自然不会渲染导航栏和工具栏。

解决方案

方案1:适配iOS 16+(推荐,使用最新API)

  1. 打开项目设置,将部署目标调整为iOS 16.0或更高版本;
  2. 在预览面板中,选择运行iOS 16+的模拟器(比如iPhone 14,iOS 16.4);
  3. 你的代码逻辑本身没有问题,调整版本后导航栏即可正常显示。如果偏好将修饰符绑定到NavigationStack,可参考以下代码(效果一致):
import SwiftUI

struct ScrumsView: View {
    let scrums: [DailyScrum]
    var body: some View {
        NavigationStack {
            List(scrums) { scrum in
                NavigationLink(destination: Text(scrum.title)) {
                    CardView(scrum: scrum)
                }
                .listRowBackground(scrum.theme.mainColor)
            }
        }
        .navigationTitle("Daily Scrums")
        .toolbar {
            Button(action: {}) {
                Image(systemName: "plus")
            }
        }
    }
}

struct ScrumsView_Previews: PreviewProvider {
    static var previews: some View {
        ScrumsView(scrums: DailyScrum.sampleData)
            .previewDevice(PreviewDevice(rawValue: "iPhone 14"))
            .previewDisplayName("iPhone 14 (iOS 16+)")
    }
}

方案2:兼容iOS 15及以下版本

如果需要适配更低版本,改用旧版NavigationView,并添加navigationViewStyle确保iPhone端显示单列导航:

import SwiftUI

struct ScrumsView: View {
    let scrums: [DailyScrum]
    var body: some View {
        NavigationView {
            List(scrums) { scrum in
                NavigationLink(destination: Text(scrum.title)) {
                    CardView(scrum: scrum)
                }
                .listRowBackground(scrum.theme.mainColor)
            }
            .navigationTitle("Daily Scrums")
            .toolbar {
                Button(action: {}) {
                    Image(systemName: "plus")
                }
            }
        }
        .navigationViewStyle(.stack) // 强制单列导航,适配iPhone设备
    }
}

struct ScrumsView_Previews: PreviewProvider {
    static var previews: some View {
        ScrumsView(scrums: DailyScrum.sampleData)
    }
}

额外检查点

  • 确认CardView未设置edgesIgnoringSafeArea(.top),避免覆盖导航栏区域;
  • 预览时确保模拟器处于正常显示状态,未开启隐藏导航栏的调试选项。

内容的提问来源于stack exchange,提问作者NQ2Resq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:14