У меня есть настройки контроллера пользовательских навигации в моем приложении, которое изменяет navigationBar
ей titleTextAttributes
, tintColor
и другие в зависимости от различных сценариев.
При запуске приложения на iOS 13 у backBarButtonItem
стрелки был синий оттенок по умолчанию. Отладчик представления показал, что только у UIBarButtonItem
s UIImageView
был этот синий оттенок.
В итоге я настроил navigationBar.tintColor
дважды, чтобы он изменил цвет ...
public class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
public var preferredNavigationBarTintColor: UIColor?
override public func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
// if you want to change color, you have to set it twice
viewController.navigationController?.navigationBar.tintColor = .none
viewController.navigationController?.navigationBar.tintColor = preferredNavigationBarTintColor ?? .white
// following line removes the text from back button
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Самым странным моментом при поиске решения был противоречивый результат, который заставляет меня думать, что это связано с просмотром анимации жизненного цикла и / или внешнего вида или кэша Xcode :)
.none
илиnil
, я просто даю ему цвет после установки внешнего вида, и он просто работает