Xcode中UINavigationController的BackButton创建及跳转无返回按钮问题求助
我之前也踩过这个坑,大概率是这几个原因之一,你可以逐一排查:
确认跳转方式是否正确
你提到用导航栏的加号按钮跳转,要确保是用pushViewController的方式(代码实现),或者在Storyboard里选择**Show(Push)**类型的segue。如果是用presentViewController或者模态跳转(比如Present Modally),新的ViewController不会加入导航栈,自然不会出现返回按钮。检查是否正确嵌入UINavigationController
确保你的初始ViewController已经被嵌入到UINavigationController中:- Storyboard操作:选中初始VC,点击顶部菜单栏的
Editor > Embed In > Navigation Controller - 代码实现:在AppDelegate或者SceneDelegate里,把UINavigationController作为根控制器,比如:
let rootVC = YourInitialViewController() let navController = UINavigationController(rootViewController: rootVC) window?.rootViewController = navController
- Storyboard操作:选中初始VC,点击顶部菜单栏的
排查是否手动隐藏了返回按钮
检查目标ViewController的代码里有没有类似这样的设置:navigationItem.hidesBackButton = true如果有,把它改成
false或者直接删除这行代码。另外也要检查导航控制器的全局设置,有没有统一隐藏返回按钮的逻辑。检查前一个VC的标题设置
返回按钮默认会显示前一个ViewController的title,如果前一个VC的title为空,有些情况下返回按钮可能显示异常(虽然iOS通常会默认显示“Back”)。你可以手动给前一个VC设置title,或者在目标VC里自定义返回按钮的标题:// 在目标VC的viewDidLoad里设置 navigationItem.backBarButtonItem = UIBarButtonItem(title: "返回", style: .plain, target: nil, action: nil)排查自定义导航栏的影响
如果你的项目里自定义了UINavigationBar的外观(比如修改了tintColor、backIndicatorImage等),可能导致返回按钮看不见。比如tintColor和导航栏背景色太接近,或者backIndicatorImage被设为空。可以暂时注释掉自定义导航栏的代码,看看返回按钮是否恢复显示,再针对性调整。
如果以上方法都试过还是不行,可以检查一下Storyboard里的导航栏是否被隐藏,或者目标VC的navigationController属性是否为nil(可以在viewDidLoad里打印print(navigationController)确认)。
内容的提问来源于stack exchange,提问作者Augusto

