从UIKit跳转至SwiftUI视图时导航栏元素延迟显示问题
解决方案
1. 移除SwiftUI中多余的NavigationView
在UIKit与SwiftUI混合导航栈中,UIHostingController已经处于UIKit的UINavigationController上下文内,SwiftUI视图无需再嵌套NavigationView——多余的嵌套会导致导航栏渲染冲突,是标题延迟显示的核心原因。修改后的NotificationsView代码如下:
struct NotificationsView: View { var body: some View { if #available(iOS 16.0, *) { notificationsView.toolbarRole(.editor) } else { notificationsView } } private var notificationsView: some View { ScrollView { // 原滚动视图内容 } .toolbar { ToolbarItem(placement: .principal) { Text("Notifications") .font(.headline) .foregroundColor(.gray) } } // 兼容iOS15及以下版本的导航栏标题设置 .navigationTitle("Notifications") .navigationBarTitleDisplayMode(.inline) } }
2. 移除返回按钮文字
在跳转至UIHostingController时,直接设置其navigationItem的backButtonTitle为空字符串,即可仅保留返回箭头:
let view = notificationsViewProvider.create(notifications: notifications) let vc = UIHostingController(rootView: view) // 清空返回按钮文字 vc.navigationItem.backButtonTitle = "" rootNavigationController.setNavigationBarHidden(false, animated: false) rootNavigationController.show(vc, sender: self)
补充说明
纯SwiftUI项目中无此问题,是因为纯SwiftUI的导航栈完全由NavigationView(iOS16+为NavigationStack)管理,不存在UIKit与SwiftUI导航上下文的冲突。混合栈场景下,必须确保两者的导航层级对齐,避免重复嵌套导航容器。
内容的提问来源于stack exchange,提问作者nince
相关产品推荐
相关产品推荐

