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

SwiftUI:从首视图弹出的Sheet不显示导航标题问题

问题原因及解决方案

你的问题出在SheetView没有被NavigationStack包裹。SwiftUI中,导航栏相关修饰符(如navigationTitle、toolbar)只有在NavigationStack(iOS 16前为NavigationView)的上下文环境中才会生效,当前你的SheetView直接作为Sheet内容,未处于导航栈上下文内,因此导航标题无法显示。

修复步骤

修改SheetView代码,将内容包裹在NavigationStack中,再将导航相关修饰符应用到栈内视图即可:

struct SheetView: View {
    var body: some View {
        NavigationStack { // 新增NavigationStack包裹内容
            VStack {
                Text(getAttributedText()).font(.body)
                Spacer()
            }
            .navigationTitle("Settings") // 现在可正常显示标题
            .navigationBarTitleDisplayMode(.inline)
            .toolbar {
                ToolbarItem(placement: .principal) {
                    Text("Settings").foregroundStyle(Color.black)
                }
            }
        }
        .interactiveDismissDisabled()
    }
    
    func getAttributedText() -> AttributedString {
        var attributedString = AttributedString("")
        
        var disclaimerText = AttributedString("This is an attributed text with links and underlined text. Some more text just for this sample app.")
        disclaimerText.foregroundColor = .black
        attributedString.append(disclaimerText)

        return attributedString
    }
}

补充说明

  • 无论从首视图还是深层页面弹出Sheet,只要内容未被NavigationStack包裹,导航栏元素都不会生效。你提到深层页面的Sheet能正常显示,大概率是那些Sheet的内容已被NavigationStack包裹。
  • 若需在Sheet中使用导航栏其他功能(如返回按钮、工具栏按钮),这种包裹方式同样适用,可保证导航上下文的完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:49:52