【发布时间】:2021-12-01 04:41:53
【问题描述】:
我正在使用 MVVM+C 模式来构建我的应用程序。目前,我遇到了将导航栏的本机后退按钮标题和图像更改为没有标题的自定义图像的问题。我已经尝试了很多我能找到的解决方案,但没有设置不同的标题甚至图像。我在 AppDelegate.swift 中得到了这段代码:
let navigationController: UINavigationController = .init()
if #available(iOS 13.0, *) {
let appearence = UINavigationBarAppearance()
appearence.configureWithOpaqueBackground()
appearence.backgroundColor = .backgroundColor
appearence.shadowColor = nil
appearence.shadowImage = nil
navigationController.navigationBar.standardAppearance = appearence
navigationController.navigationBar.scrollEdgeAppearance = navigationController.navigationBar.standardAppearance
} else {
navigationController.navigationBar.isTranslucent = false
navigationController.navigationBar.barTintColor = .backgroundColor
navigationController.navigationBar.shadowImage = nil
navigationController.navigationBar.shadowColor = nil
}
// This code is not working at all, always get "Back" as a default with default image =====
let backButtonBackgroundImage = UIImage(named: "backButton")
navigationController.navigationBar.backIndicatorImage = backButtonBackgroundImage
navigationController.navigationBar.backIndicatorTransitionMaskImage = backButtonBackgroundImage
let backBarButtton = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
navigationController.navigationItem.backBarButtonItem = backBarButtton
// =========
navigationController.navigationBar.tintColor = .primary
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
另外,我关注了official documentation,但没有成功。默认情况下,我已将导航栏设置为隐藏(因为多次不需要),我将其显示在 ViewWillAppear 并隐藏在 ViewWillDisappear 方法中。
有人知道发生了什么吗?谢谢!
解决方案: 使用 Scott 的代码后,我能够更改导航栏的图像和外观,但我失去了向后滑动的能力。将此代码添加到 UINavigationBar 扩展后,我能够将其取回:
extension UINavigationController: UIGestureRecognizerDelegate {
@objc func goBack(sender: Any?) {
self.popViewController(animated: true)
}
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
【问题讨论】:
标签: swift uinavigationcontroller uinavigationbar uinavigationitem uinavigationbarappearance