You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift4中使用LargeTitleBar时导航栏返回按钮标题消失问题求助

解决Swift 4中Large Title导航栏标题截断导致返回按钮标题消失的问题

我之前也碰到过类似的坑——UIKit在Large Title模式下为了节省导航栏空间,当主标题过长被截断时,会自动隐藏返回按钮的标题,不同设备因为屏幕宽度不同,触发的字符长度阈值也不一样(你提到的iPhone SE 20字节、iPhone X 22字节就是典型的例子)。下面给你几个可行的解决思路:

方案1:强制锁定返回按钮标题

直接自定义返回按钮,或者显式设置返回按钮的标题,不让UIKit自动调整。比如在当前控制器的viewDidLoad里添加:

// 方法1:设置返回按钮的固定标题
navigationItem.backBarButtonItem = UIBarButtonItem(title: "返回", style: .plain, target: nil, action: nil)

// 方法2:如果是上一个控制器,在跳转前设置它的backBarButtonItem
// 比如在A控制器跳转到B控制器前:
let bVC = BViewController()
navigationItem.backBarButtonItem = UIBarButtonItem(title: "A页面", style: .plain, target: nil, action: nil)
navigationController?.pushViewController(bVC, animated: true)

这个方法的核心是显式指定返回按钮的标题,绕过UIKit的自动隐藏逻辑。

方案2:避免主标题被截断

如果希望保留Large Title的原生样式,同时不让标题截断,可以尝试调整标题的显示规则:

  • 调整Large Title的字体大小:
if let font = UIFont.preferredFont(forTextStyle: .largeTitle).withSize(28) {
    UINavigationBar.appearance().largeTitleTextAttributes = [.font: font]
}

缩小字体后,标题能容纳更多字符,自然不会触发截断逻辑。

  • 自定义标题视图,支持多行显示:
    把navigationBar的titleView换成一个UILabel,开启多行显示:
let titleLabel = UILabel()
titleLabel.text = someText
titleLabel.numberOfLines = 0
titleLabel.textAlignment = .center
titleLabel.font = UIFont.preferredFont(forTextStyle: .largeTitle)
navigationItem.titleView = titleLabel

这样标题会自动换行,不会被截断,也就不会触发返回按钮标题消失的问题。

方案3:利用UIKit的布局回调强制恢复返回按钮

如果上面的方法都不适用,可以在控制器的布局回调里强制设置返回按钮标题,比如在viewWillLayoutSubviews中:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    // 确保返回按钮标题始终存在
    navigationItem.backBarButtonItem?.title = "你的返回标题"
    // 或者直接重置返回按钮
    let backButton = UIBarButtonItem(image: UIImage(named: "back_icon"), style: .plain, target: self, action: #selector(backAction))
    navigationItem.leftBarButtonItem = backButton
}

@objc func backAction() {
    navigationController?.popViewController(animated: true)
}

这个方法比较“粗暴”但胜在有效,适合需要完全自定义返回按钮样式的场景。

内容的提问来源于stack exchange,提问作者Tarou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:41