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

导航栏大标题过长被截断,如何不改大小实现多行显示?

实现导航栏大标题多行显示(不改变字号)

方案一:自定义导航栏标题视图

系统默认大标题为单行截断逻辑,可通过自定义UILabel作为导航栏标题视图实现多行显示:

  • 创建UILabel并设置numberOfLines = 0,保留系统大标题字号(可通过UIFont.preferredFont(forTextStyle: .largeTitle)获取默认大标题字体)
  • 将自定义label赋值给navigationItem.titleView
  • 确保label宽度适配导航栏可用空间,触发自动换行

示例代码:

// 在ViewController的viewDidLoad方法中实现
let titleLabel = UILabel()
titleLabel.text = "你的超长标题文本内容"
titleLabel.font = UIFont.preferredFont(forTextStyle: .largeTitle)
titleLabel.numberOfLines = 0
titleLabel.textAlignment = .center
titleLabel.sizeToFit()
navigationItem.titleView = titleLabel

方案二:通过KVC修改系统大标题Label属性

若不想完全自定义标题视图,可尝试通过KVC获取系统内部的大标题Label,修改其行数限制:

注意:该方法依赖系统私有结构,iOS版本更新可能导致失效,需做好兼容性测试

示例代码:

// 在ViewController的viewDidAppear方法中调用(确保导航栏已完成加载)
if let navigationBar = navigationController?.navigationBar,
   let largeTitleLabel = navigationBar.value(forKey: "_largeTitleLabel") as? UILabel {
    largeTitleLabel.numberOfLines = 0
    largeTitleLabel.sizeToFit()
    navigationBar.layoutSubviews()
}

注意事项

  • 自定义标题视图时,需适配不同设备的导航栏宽度,保证label自动换行逻辑正常
  • 使用KVC方案时,需针对目标iOS版本做测试,避免系统更新后出现崩溃
  • 两种方案均保留大标题原始字号,满足不改变标题尺寸的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:02:01