You need to enable JavaScript to run this app. SwiftUI配合UIKit导航时隐藏View1标题且保留View2<Back>按钮如何实现
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI配合UIKit导航时隐藏View1标题且保留View2<Back>按钮如何实现

解决方案

你可以通过自定义View1对应UIHostingController的导航项返回按钮配置实现需求,不需要修改当前导航栏的显示标题:

  • 第一步:在View1所属的UIHostingController的viewDidLoad方法中,做两个配置
    1. 将当前导航项的标题置空,保证View1的导航栏不显示标题
    2. 自定义当前导航项的backBarButtonItem,设置标题为"Back",响应事件走系统默认的返回逻辑即可,不需要自定义点击事件
class View1HostingController: UIHostingController<View1> {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 配置当前页导航栏不显示标题
        navigationItem.title = ""
        // 配置下一页的返回按钮显示内容,不影响当前页的标题显示
        navigationItem.backBarButtonItem = UIBarButtonItem(
            title: "Back",
            style: .plain,
            target: nil,
            action: nil
        )
        // 添加你需要的Exit右侧按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(
            title: "Exit",
            style: .plain,
            target: self,
            action: #selector(exitAction)
        )
    }
    
    @objc private func exitAction() {
        // 你的退出逻辑
    }
}
  • 第二步:View2对应的UIHostingController不需要做额外的导航栏配置,压入导航栈后会自动继承上一个控制器配置的backBarButtonItem的显示内容,返回按钮就会显示<Back
  • 第三步:如果需要隐藏View2的导航栏标题,直接在View2的HostingController的viewDidLoad里设置navigationItem.title = ""即可

原理解释

UINavigationController的返回按钮显示规则是:当前栈顶控制器的返回按钮文本,取的是上一个栈内控制器的backBarButtonItem的title,如果上一个控制器没有自定义backBarButtonItem,才会取上一个控制器的navigationItem.title作为返回按钮文本。所以单独配置backBarButtonItem不会影响当前控制器的标题显示,刚好匹配你的需求。

内容的提问来源于stack exchange,提问作者hbr4u7vb2sljksdf2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:15:02