通过代码添加的导航栏项目和栏按钮无法正常显示如何解决
导航栏元素不显示排查方案
- 确认视图控制器嵌套在
UINavigationController中
navigationItem配置仅对处于导航控制器管理栈内的视图控制器生效,若直接将当前控制器设为根控制器,所有导航栏配置都不会生效。正确的根控制器设置示例:
// AppDelegate 或 SceneDelegate 中根控制器配置代码 let loginVC = LoginViewController() window?.rootViewController = UINavigationController(rootViewController: loginVC)
- 修正系统图标加载方式
你使用的
arrowshape.turn.up.left是iOS13+提供的SF系统图标,不能用UIImage(named:)加载,该方法只会读取项目本地资源包的图片,加载系统图标需调用专用构造方法,否则返回nil会导致按钮无内容不可见:
修改对应代码为:
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "arrowshape.turn.up.left"), style: .plain, target: self, action: #selector(handleSignOut))
- 排查配置覆盖问题
检查
viewWillAppear、viewDidAppear等晚于viewDidLoad执行的生命周期方法,是否存在重新赋值navigationItem.leftBarButtonItem、修改title或者隐藏导航栏的代码。
- 强制显示导航栏
可在
configureViewComponents方法末尾增加代码,确保导航栏处于显示状态:
navigationController?.setNavigationBarHidden(false, animated: false)
内容的提问来源于stack exchange,提问作者Mellopria
相关产品推荐
相关产品推荐

