Qual é a maneira correta de definir o tom da seta do botão Voltar no ios 13

11

No iOS 13, a Apple introduziu o novo objeto de proxy UINavigationBarAppearance para definir a aparência da barra de navegação. Consegui definir quase tudo o que precisava, exceto uma pequena coisa. A seta do botão voltar sempre é renderizada com a cor azul e não faço ideia de como defini-la com a cor desejada. Estou usando a [[UINavigationBar appearance] setTintColor:]maneira antiga , mas acho que deve haver alguma maneira de fazer isso com a API de objetos UINavigationBarAppearance. Alguém tem alguma idéia de como?

romano
fonte

Respostas:

1

A nova maneira de definir a cor do botão Voltar da aparência (proxy) seria:

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

Eu tenho uma configuração controlador de navegação personalizado em meu aplicativo, o que modifica navigationBars titleTextAttributes, tintColore outros dependendo de diferentes cenários.

Ao executar o aplicativo no iOS 13, a backBarButtonItemseta tinha a cor azul padrão. O depurador vista mostrou que apenas os UIBarButtonItems UIImageViewtinha essa tonalidade azul.

Acabei fazendo o ajuste navigationBar.tintColorduas vezes para que ele mudasse de cor ...

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)

    }


A parte mais estranha ao procurar a solução foi o resultado inconsistente, o que me faz pensar que está relacionado à visualização do ciclo de vida e / ou animações de aparência ou cache do Xcode :)

Artur
fonte
2
Não consigo acreditar em todas as correções de hackers que precisamos fazer para oferecer suporte ao iOS 13: / Obrigado pela correção btw!
Sreejith
Estranho, eu não tenho configurá-lo para .noneou nil, eu apenas dar-lhe uma cor depois de definir a aparência e ele simplesmente funciona
Mark