iOS开发:Swift中导航栏标题不显示问题求助
排查Swift导航栏标题不显示(仅见细横线)的问题
嘿,我之前也碰到过一模一样的糟心情况——导航栏只剩一条细细的横线,设置好的标题死活不出来,折腾了好一会儿才找到症结。结合你描述的问题,我整理了几个最常见的排查方向和解决方案,你可以挨个试:
1. 先确认导航控制器的基础配置是否正确
首先得确保你的视图控制器确实被嵌入到UINavigationController中,而且导航控制器是作为窗口的根控制器(或者被正确添加到视图层级里)。比如你在AppDelegate/SceneDelegate里的代码是不是类似这样:
let rootVC = YourViewController() let navVC = UINavigationController(rootViewController: rootVC) window?.rootViewController = navVC window?.makeKeyAndVisible()
如果你的VC没被导航控制器包裹,那导航栏自然不会正常渲染,大概率只会显示系统默认的那条细线。
2. 检查导航栏的隐藏/高度设置
有时候可能不小心写了隐藏导航栏的代码,或者错误修改了它的高度:
// 别不小心加了这行! navigationController?.isNavigationBarHidden = true // 或者错误地把导航栏高度改得极小 navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 1)
你可以在viewDidLoad里加上这两句,强制让导航栏恢复正常状态:
navigationController?.isNavigationBarHidden = false navigationController?.navigationBar.sizeToFit()
3. 排查标题文字的可见性问题
有可能你设置的标题颜色和导航栏背景色完全一致,导致看起来像是没显示。比如自定义导航栏外观时犯了这种小错误:
UINavigationBar.appearance().titleTextAttributes = [ NSAttributedString.Key.foregroundColor: UIColor.white ] // 但如果导航栏背景也是白色,标题就彻底隐身了! UINavigationBar.appearance().backgroundColor = UIColor.white
解决方法很简单,把标题颜色改成和背景对比明显的色调,或者调整背景色:
navigationController?.navigationBar.titleTextAttributes = [ .foregroundColor: UIColor.black, .font: UIFont.systemFont(ofSize: 17, weight: .semibold) ]
4. 检查是否设置了空的titleView
有时候为了自定义导航栏,会误把titleView设成空视图或者nil,这会直接覆盖默认的标题显示:
// 这种操作会让默认标题消失 navigationItem.titleView = UIView()
如果不需要自定义titleView,直接删掉这句,或者手动设回nil:
navigationItem.titleView = nil
然后重新设置标题:
navigationItem.title = "你的标题内容" // 或者直接用视图控制器的title属性,效果一样 title = "你的标题内容"
5. 确认设置标题的时机是否正确
尽量在viewDidLoad或者viewWillAppear里设置标题,别在初始化VC的时候就设置——那时候导航控制器还没和VC建立关联,设置自然无效:
override func viewDidLoad() { super.viewDidLoad() // 这里设置标题才会生效 title = "我的导航标题" }
如果上面的方法都试过还是不行,你可以把你用到的导航栏相关代码贴出来,我再帮你仔细排查!
内容的提问来源于stack exchange,提问作者Fakhar Zaman
相关产品推荐
相关产品推荐

