homeVC中navigationItem.title返回后不显示的问题排查
解决UICollectionViewController返回后导航栏标题消失的问题
这种情况我之前也碰到过几次,大概率是导航栈的item被意外修改或者没有在合适的时机重新设置标题导致的,给你几个排查和解决的方向:
1. 检查目标视图控制器的代码,避免直接修改前一个页面的导航item
你说目标VC不需要显示前一个页面的标题,很多人会错误地用下面这种方式来隐藏返回按钮的标题:
// 错误写法:会直接清空homeVC的navigationItem.title navigationController?.navigationBar.topItem?.title = ""
这种操作会直接修改导航栈中上一个VC(也就是你的homeVC)的标题,导致返回后标题消失。正确的做法是设置当前目标VC自己的backBarButtonItem:
// 正确写法:只修改返回按钮的显示,不影响homeVC的标题 override func viewDidLoad() { super.viewDidLoad() let backButton = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil) navigationItem.backBarButtonItem = backButton }
2. 在homeVC的viewWillAppear中重新设置标题
初始时你可能是在viewDidLoad里设置的标题,但viewDidLoad只会在VC第一次加载时执行。当你从目标VC返回时,homeVC的viewWillAppear会触发,这时候可以在这里重新赋值标题,确保每次页面显示时标题都存在:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationItem.title = "你的首页标题" }
3. 排查是否有全局修改导航栏属性的操作
如果目标VC里修改了导航栏的全局样式(比如标题颜色、透明度等),也可能导致返回后homeVC的标题不显示。比如:
// 错误示例:把标题颜色设为透明 navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.clear]
这种情况需要在目标VC的viewWillDisappear中恢复导航栏的原始设置,或者在homeVC的viewWillAppear里重新设置正确的标题样式。
4. 检查是否有自定义导航栏或第三方库的影响
如果你用了自定义导航栏或者第三方导航框架,可能存在导航栏状态重置的问题。这时候可以尝试暂时禁用第三方库,看看标题是否恢复,逐步排查问题所在。
按照上面的步骤排查,应该能解决标题消失的问题。
内容的提问来源于stack exchange,提问作者Alvin123
相关产品推荐
相关产品推荐

