将 `navigationItem.backButtonDisplayMode = .minimal` 与自定义后退按钮图像一起使用

Use `navigationItem.backButtonDisplayMode = .minimal` with a custom back button image

对于 iOS 14+ 应用程序,我想使用 navigationItem.backButtonDisplayMode = .minimal 隐藏后退按钮标题,同时在后退按钮的 long-press 菜单中仍然可以使用该标题。哪个有效..但是我也想更改后退按钮图像,以替换默认的 V 形。

但无论我尝试什么,我似乎都无法找到一个解决方案来显示没有标题的自定义后退按钮图像,同时也不会在后退按钮的 [=33] 中显示空白 space =] 菜单,并且不破坏 slide-to-go-back-gesture.

有人试过类似的东西并成功了吗?

所以在第一个视图控制器中我显示了一个标题:

然后在推送的视图控制器中,我想显示一个没有“one”标题的自定义后退按钮图像(如下所示),并且 long-press 菜单仍然显示“one”而不是 a空白 space.

这主要是让我到达那里,除了它打破了滑动返回的手势:

override func viewDidLoad() {
  super.viewDidLoad()

  let backImage = UIImage(named: "backImage")?.withRenderingMode(.alwaysOriginal)
  navigationController?.navigationBar.backIndicatorImage = backImage
  navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage

  navigationItem.backButtonDisplayMode = .minimal
}

更新:实际上它似乎只是在模拟器上崩溃,在实际设备上一切正常。我现在有一个可以正常工作的最小项目设置,现在要找出为什么它在我的实际大项目中不起作用!

要设置图像,您可以使用:

navigationController?.navigationBar.backIndicatorImage = yourBackImage
navigationController?.navigationBar.backIndicatorTransitionMaskImage = yourBackImage

假设您的导航是从 AVCBVC

如果要禁用长按菜单,可以按照this answer.

如果您希望长按菜单使用正确的标题,您需要将 AVCnavigationItem.title 设置为正确的值,并且 navigationItem.backBarButtonItem 应该是 nil(这是默认值)对于 BVC.

如果您不想在 AVC 中显示标题,您可以使用 titleView:

隐藏它
navigationItem.title = "title for long press navigation menu"
navigationItem.titleView = UIView()

好吧,我终于弄明白了我遇到的所有问题。

基本上,这段代码工作得很好:

override func viewDidLoad() {
  super.viewDidLoad()

  let backImage = UIImage(named: "backImage")?.withRenderingMode(.alwaysOriginal)
  navigationController?.navigationBar.backIndicatorImage = backImage
  navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage

  navigationItem.backButtonDisplayMode = .minimal
}

但是我遇到了滑动返回手势不再起作用的问题。事实证明,这是一个模拟器错误,在设备上运行良好。然后是自定义后退按钮图像实际上并没有出现在我的视图中的问题,因为:

let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .pageBackground
appearance.titleTextAttributes = [.foregroundColor: UIColor.abbey]
appearance.shadowColor = .clear

navigationBar.scrollEdgeAppearance = appearance
navigationBar.standardAppearance = appearance
navigationBar.compactAppearance = appearance

设置自定义外观后,自定义后退按钮图像就会完全消失。简单修复,直接在navigationBar上设置这些东西就可以了,不涉及外观

现在一切正常!