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

