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

