Qual è il modo giusto per ripristinare la tinta della freccia del pulsante in iOS 13


11

In iOS 13, Apple ha introdotto il nuovo oggetto proxy UINavigationBarAppearance per impostare l'aspetto della barra di navigazione. Sono stato in grado di impostare quasi tutto ciò di cui avevo bisogno, tranne una piccola cosa. La freccia del pulsante Indietro viene sempre visualizzata con una tinta blu e non ho idea di come impostarla sul colore desiderato. Sto usando il vecchio [[UINavigationBar appearance] setTintColor:]modo, ma penso che ci debba essere un modo per farlo con l'API degli oggetti UINavigationBarAppearance. Qualcuno ha idea di come?

Risposte:


1

Il nuovo modo di impostare il colore del pulsante Indietro dell'aspetto (proxy) sarebbe:

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

5

Ho una configurazione controller di navigazione personalizzato nella mia app, che modifica navigationBars titleTextAttributes, tintColore altri a seconda delle diverse situazioni.

Eseguendo l'app su iOS 13, la backBarButtonItemfreccia aveva il colore di tinta blu predefinito. Il debugger di visualizzazione ha mostrato che solo gli UIBarButtonItems UIImageViewavevano questa tinta blu.

Quello che ho finito è stato impostare navigationBar.tintColordue volte per cambiare il colore ...

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 parte più strana nella ricerca di una soluzione è stato il risultato incoerente, il che mi fa pensare che sia correlato alla visualizzazione del ciclo di vita e / o delle animazioni dell'aspetto o alla cache Xcode :)


2
Non riesco a credere a tutte le correzioni di hack che dobbiamo fare per supportare iOS 13: / Grazie per la correzione tra l'altro!
Sreejith

Strano, non devo impostarlo su .noneo nil, gli ho appena dato un colore dopo aver impostato l'aspetto e funziona
Mark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.