跳到主要内容

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 种就不会出现这种情况。