Mam zwyczaj setup kontrolera nawigacji w moim app, który modyfikuje navigationBar
s titleTextAttributes
, tintColor
a inne w zależności od różnych scenariuszy.
Po uruchomieniu aplikacji na iOS 13 backBarButtonItem
strzałka miała domyślny niebieski odcień. Debuger widoku pokazał, że tylko UIBarButtonItem
s UIImageView
miały ten niebieski odcień.
Skończyło się na tym, że navigationBar.tintColor
dwa razy zmieniłem kolor ...
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)
}
Najdziwniejsze w poszukiwaniu rozwiązania był niespójny wynik, który sprawia, że myślę, że ma to związek z cyklem życia i / lub animacjami wyglądu lub pamięcią podręczną Xcode :)
.none
lubnil
po prostu nadaję mu kolor po ustawieniu wyglądu i po prostu działa