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

设置leftBarButton后UIViewController导航栏仍显示返回按钮

解决导航栏左侧仅显示自定义按钮的问题

可行代码方案

确保在**viewWillAppear(_:)**方法中执行代码(而非viewDidLoad,此时导航栈状态已稳定),以下两种方式二选一即可:

方式一:直接隐藏返回按钮+设置自定义按钮

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // 根据需求创建自定义按钮(可替换为图标样式)
    let leftButton = UIBarButtonItem(title: "自定义", style: .plain, target: self, action: #selector(leftButtonTapped))
    
    // 强制隐藏系统返回按钮
    navigationItem.setHidesBackButton(true, animated: false)
    // 设置自定义左侧按钮
    navigationItem.leftBarButtonItem = leftButton
}

@objc private func leftButtonTapped() {
    // 自定义按钮点击逻辑,比如返回上一页
    navigationController?.popViewController(animated: true)
}

方式二:通过leftBarButtonItems自动隐藏返回按钮

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    let leftButton = UIBarButtonItem(title: "自定义", style: .plain, target: self, action: #selector(leftButtonTapped))
    
    // 关闭补充返回按钮模式,设置自定义按钮组后自动隐藏系统返回按钮
    navigationItem.leftItemsSupplementBackButton = false
    navigationItem.setLeftBarButtonItems([leftButton], animated: false)
}

@objc private func leftButtonTapped() {
    // 自定义按钮逻辑
}

排查无效原因

如果以上代码仍不生效,检查以下几点:

  • 不要同时设置leftBarButtonItem和leftBarButtonItems,两者会互相覆盖导致冲突
  • 检查是否子类化了UINavigationController,是否在自定义导航控制器中修改了返回按钮的默认配置
  • 排查导航栈中其他页面的viewWillDisappear方法,是否有恢复导航栏设置的代码
  • 确认没有使用第三方导航栏相关框架(如侧边栏库),这类框架可能会覆盖系统导航栏的默认行为

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:48:16