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

Swift 导航控制器大标题调整:如何与右侧栏按钮显示在同一行

实现导航栏大标题与右侧栏按钮同屏显示的最优方案

原代码失效原因

你调用的setTitlePositionAdjustment方法仅用于调整右栏按钮自身文字的相对偏移,无法修改系统大标题的布局位置:系统大标题模式下,导航栏默认将大标题放在独立的底部区域,和顶部的栏按钮不属于同一布局层级,因此无法通过调整按钮偏移实现同行。


方案1:关闭大标题模式(最推荐,兼容性最好)

如果不需要滚动时的大标题折叠交互,直接关闭当前页的大标题显示即可,系统默认普通标题和右栏按钮同行:

// 关闭当前页面大标题显示,不影响其他页面的大标题配置
navigationItem.largeTitleDisplayMode = .never
// 直接设置导航栏标题即可
navigationItem.title = NSLocalizedString("Discover", comment: "").localized(lang)

如果需要保留和大标题一样的字体大小,参考方案2。


方案2:自定义titleView(保留大字体效果)

通过自定义导航栏的titleView,直接把大字号的标题控件放在和右按钮同级的布局层,天然实现同行显示:

// 1. 创建自定义标题标签,配置和系统大标题一致的样式
let titleLabel = UILabel()
titleLabel.text = NSLocalizedString("Discover", comment: "").localized(lang)
titleLabel.font = .systemFont(ofSize: 34, weight: .bold)
titleLabel.textColor = .label
titleLabel.sizeToFit()

// 2. 赋值给navigationItem的titleView
navigationItem.titleView = titleLabel
// 3. 关闭当前页大标题模式
navigationItem.largeTitleDisplayMode = .never

如果需要左对齐标题,可给titleLabel套一层父视图,调整父视图的frame实现左偏移即可。


不推荐方案:修改导航栏子视图布局

如果必须保留系统大标题的折叠动画效果,只能遍历UINavigationBar的子视图修改大标题控件的frame,但该方案依赖iOS系统内部视图结构,不同系统版本可能失效,稳定性差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:54:03