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

