¿Cuál es la forma correcta de configurar el tinte de flecha del botón de retroceso en ios 13

11

En iOS 13, Apple introdujo el nuevo objeto proxy UINavigationBarAppearance para establecer la apariencia de la barra de navegación. He podido configurar casi todo lo que necesitaba, excepto una pequeña cosa. La flecha del botón de retroceso siempre se representa con un color de tinte azul y no tengo idea de cómo configurarla con el color que quiero. Estoy usando la [[UINavigationBar appearance] setTintColor:]forma anterior, pero creo que tiene que haber alguna forma de hacerlo con la API de objetos UINavigationBarAppearance. Alguien tiene alguna idea de cómo?

romano
fuente

Respuestas:

1

La nueva forma de configurar el color del botón de retroceso de la apariencia (proxy) sería:

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
fuente
5

Tengo una configuración de control de navegación personalizado en mi aplicación, que modifica navigationBars titleTextAttributes, tintColory otros en función de diferentes escenarios.

Al ejecutar la aplicación en iOS 13, la backBarButtonItemflecha tenía el color azul predeterminado. El depurador de la vista mostró que solo los UIBarButtonItems UIImageViewtenían este tinte azul.

Lo que terminé haciendo fue configurar navigationBar.tintColordos veces para que cambiara el color ...

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 más extraña al buscar una solución fue el resultado inconsistente, lo que me hace pensar que está relacionado con ver el ciclo de vida y / o las animaciones de apariencia o el caché de Xcode :)

Artur
fuente
2
No puedo creer todas las soluciones de hack que debemos hacer para admitir iOS 13: / ¡Gracias por la solución por cierto!
Sreejith
Extraño, no tengo que configurarlo .noneo nil, simplemente le doy un color después de configurar la apariencia y simplemente funciona
Mark