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

Xcode9.3+Swift开发iOS应用:导航栏左侧按钮不显示的解决方法

解决导航栏左侧按钮无法显示的问题

我之前也碰到过一模一样的情况,大概率是系统默认的返回按钮和你自定义的左侧按钮冲突了,或者是设置方式的细节没处理对,给你几个可行的解决思路:

1. 先隐藏系统默认返回按钮

如果你的TableViewController是被push进入导航栈的,系统会自动生成一个返回按钮,它会直接覆盖你设置的左侧自定义按钮。先把默认返回按钮隐藏,再设置自己的按钮就好了:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 先隐藏系统自带的返回按钮
    navigationItem.hidesBackButton = true
    
    let naviButton = UIBarButtonItem(title: "naviButton", style: .plain, target: self, action: #selector(naviButtonTapped))
    navigationItem.leftBarButtonItem = naviButton
}

@objc func naviButtonTapped() {
    // 这里写按钮点击后的逻辑
    print("左侧导航按钮被点击")
}

2. 检查Storyboard的导航控制器配置

如果你的控制器是通过Storyboard嵌入导航控制器的,确认这两个点:

  • 导航控制器的Navigation Bar在Attributes Inspector里是启用状态
  • 有没有在Storyboard里提前给导航栏左侧设置了其他控件,导致代码设置被覆盖

3. 改用数组形式设置左侧按钮

偶尔单个设置leftBarButtonItem会有莫名的不生效情况,试试用数组的方式添加:

override func viewDidLoad() {
    super.viewDidLoad()
    
    let naviButton = UIBarButtonItem(title: "naviButton", style: .plain, target: self, action: #selector(naviButtonTapped))
    navigationItem.leftBarButtonItems = [naviButton]
}

4. 确认导航控制器存在

如果你的TableViewController没有被正确嵌入到UINavigationController中,navigationItem会是nil,按钮自然显示不出来。可以在viewDidLoad里打印验证一下:

print("当前导航控制器:\(navigationController ?? "不存在")")

既然右侧按钮能正常显示,说明导航栏本身是正常工作的,重点排查左侧按钮和系统默认返回按钮的冲突问题,先试第一个方案应该就能解决~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:43:39