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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:11:14