Jaki jest właściwy sposób ustawienia odcienia strzałki przycisku Wstecz w iOS 13

11

W systemie iOS 13 Apple wprowadził nowy obiekt proxy UINavigationBarAppearance, aby ustawić wygląd paska nawigacji. Byłem w stanie ustawić prawie wszystko, czego potrzebowałem, z wyjątkiem jednej małej rzeczy. Strzałka przycisku Wstecz jest zawsze renderowana za pomocą niebieskiego odcienia i nie mam pojęcia, jak ustawić żądany kolor. Używam starego [[UINavigationBar appearance] setTintColor:]sposobu, ale myślę, że musi być jakiś sposób, aby to zrobić za pomocą interfejsu API obiektów UINavigationBarAppearance. Czy ktoś ma jakiś pomysł jak?

rzymski
źródło

Odpowiedzi:

1

Nowy sposób ustawiania koloru przycisku Wstecz wyglądu (proxy) to:

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
źródło
5

Mam zwyczaj setup kontrolera nawigacji w moim app, który modyfikuje navigationBars titleTextAttributes, tintColora inne w zależności od różnych scenariuszy.

Po uruchomieniu aplikacji na iOS 13 backBarButtonItemstrzałka miała domyślny niebieski odcień. Debuger widoku pokazał, że tylko UIBarButtonItems UIImageViewmiały ten niebieski odcień.

Skończyło się na tym, że navigationBar.tintColordwa 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 :)

Artur
źródło
2
Nie mogę uwierzyć we wszystkie poprawki hakerskie, które musimy wykonać, aby obsługiwać iOS 13: / Dzięki za naprawę btw!
Sreejith,
Dziwne, nie muszę go ustawiać .nonelub nilpo prostu nadaję mu kolor po ustawieniu wyglądu i po prostu działa
Mark