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

UIHostingController全屏模态展示时自定义导航栏左侧按钮不显示的问题

UIHostingController全屏模态展示时自定义导航栏左侧按钮不显示的问题

嘿,我瞅了你的代码,很快就找到问题所在啦!你现在设置导航栏按钮的方式搞错了对象~

你在PresentedViewController的viewDidLoad里写了:

navigationController?.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back")

但实际上,UINavigationController的navigationItem是它自身的导航项,而我们要给当前展示的PresentedViewController添加左侧按钮,应该操作当前控制器自己的navigationItem,而不是导航控制器的。

另外,你还没给按钮添加点击事件,就算显示出来也没法 dismiss 页面,得补上这部分逻辑。

修改后的PresentedViewController代码应该是这样的:

class PresentedViewController: UIHostingController<PresentedView> {

    init() {
        super.init(rootView: PresentedView())
        self.title = "Presented screen title"
    }

    @MainActor @objc required dynamic init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationController?.setNavigationBarHidden(false, animated: false)
        
        // 改成操作当前控制器的navigationItem,同时添加点击事件
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(dismissSelf))
    }
    
    // 实现dismiss的方法
    @objc private func dismissSelf() {
        dismiss(animated: true)
    }
}

为什么这样改就生效了?因为当你把PresentedViewController作为UINavigationController的根控制器时,导航栏会自动使用当前栈顶控制器(也就是PresentedViewController)的navigationItem来渲染内容,包括标题、左右按钮这些。之前你改的是导航控制器自己的导航项,自然不会在页面上显示出来啦~

备注:内容来源于stack exchange,提问作者user11799

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:38:11