Quelle est la bonne façon de définir la teinte de la flèche du bouton de retour dans iOS 13

11

Dans ios 13, Apple a introduit le nouvel objet proxy UINavigationBarAppearance pour définir l'apparence de la barre de navigation. J'ai été en mesure de définir presque tout ce dont j'avais besoin, sauf une petite chose. La flèche du bouton de retour est toujours rendue avec une couleur de teinte bleue et je ne sais pas comment le définir à la couleur que je veux. J'utilise l'ancienne [[UINavigationBar appearance] setTintColor:]méthode, mais je pense qu'il doit y avoir un moyen de le faire avec l'API des objets UINavigationBarAppearance. Quelqu'un a une idée de comment?

romain
la source

Réponses:

1

La nouvelle façon de définir la couleur du bouton de retour de l'apparence (proxy) serait:

let appearance = UINavigationBarAppearance()

// Apply the configuration option of your choice
appearance.configureWithTransparentBackground()

// Create button appearance, with the custom color
let buttonAppearance = UIBarButtonItemAppearance(style: .plain)
buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]

// Apply button appearance
appearance.buttonAppearance = buttonAppearance

// Apply tint to the back arrow "chevron"
UINavigationBar.appearance().tintColor = UIColor.whiteI

// Apply proxy
UINavigationBar.appearance().standardAppearance = appearance

// Perhaps you'd want to set these as well depending on your design:
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
Justin Ganzer
la source
5

J'ai une configuration du contrôleur de navigation personnalisé dans mon application, ce qui modifie navigationBars titleTextAttributes, tintColoret d' autres en fonction de différents scénarios.

En exécutant l'application sur iOS 13, la backBarButtonItemflèche avait la couleur de teinte bleue par défaut. Le débogueur de vue a montré que seuls les UIBarButtonItems UIImageViewavaient cette teinte bleue.

Ce que j'ai fini par faire, c'était de régler le navigationBar.tintColordouble pour qu'il change de couleur ...

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)

    }


La partie la plus étrange lors de la recherche de solution était le résultat incohérent, ce qui me fait penser que cela est lié au cycle de vie et / ou aux animations d'apparence ou au cache Xcode :)

Artur
la source
2
Je ne peux pas croire tous les correctifs que nous devons faire pour prendre en charge iOS 13: / Merci pour le correctif btw!
Sreejith
Étrange, je n'ai pas besoin de le régler sur .noneou nilje lui donne juste une couleur après avoir défini l'apparence et ça fonctionne
Mark