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
相关产品推荐
相关产品推荐

