iOS 去掉导航栏返回按钮的标题
· 阅读需 3 分钟
导航栏返回按钮的标题是前一个 View Controller 的 title,但是设计 App 时基本上只保留箭头,所以这个标题很鸡肋。
返回按钮的默认样式
如果前面一个 View Controller 的 navigationItem.title
:
- 为空:显示箭头 + “Back”
- 不为空:
- 当前界面标题能显示完全 :显示箭头 + 前一个界面的标题
- 当前界面标题过长,会隐藏前一个界面的标题:显示箭头 + “Back”
解决方式
1. 修改水平偏移
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -1000.0, vertical: 0.0), for: .default)
这里的**-1000.0**,是为了考虑平板的横屏方向。
缺点:返回时,前一个界面的标题是从左 👉🏻 右嗖的一下闪过,不是默认的渐变效果
2. AOP
通过借助 Aspects 在 UIViewController 的 viewDidLoad
里面修改。
这里有三种方式,对应不同的系统版本。
override func viewDidLoad() {
super.viewDidLoad()
// 1
if #available(iOS 14.0, *) {
navigationItem.backButtonDisplayMode = .minimal
}
// 2
else if #available(iOS 11.0, *) {
navigationItem.backButtonTitle = ""
}
// 3
else {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}
第 2 和第 3 种其实是一样的效果,只用第 3 种方式也可以替代第 2 种,只不过第 2 种是 iOS 11 自带的属性。
最开始我是用到第 3 种,但这两种方式在 iOS 13 还是 14 之后的版本上,有点体验不好的就是:长按返回按钮时无法显示标题列表。
比如进入到很深的一个详情界面,比如 5 级,我要立马回到第 2 级界面,就可以长按返 回按钮,系统会列出前面所有的界面的标题,然后你移动到对应标题就会返回到那个界面。
第 1 种就不会出现这种情况。