Який правильний спосіб встановити відтінок кнопки назад на ios 13


11

У ios 13 Apple представила новий проксі-об'єкт UINavigationBarAppearance для встановлення зовнішнього вигляду панелі навігації. Мені вдалося встановити майже все, що мені потрібно, крім однієї дрібниці. Стрілка кнопки "назад" завжди відображається із синім відтінком, і я не маю уявлення, як її встановити під потрібний колір. Я використовую старий [[UINavigationBar appearance] setTintColor:]спосіб, але, думаю, повинен бути якийсь спосіб зробити це за допомогою API об’єктів UINavigationBarAppearance. Хтось має ідею як?

Відповіді:


1

Новим способом встановлення кольору задньої панелі зовнішнього вигляду (проксі) буде:

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

У мене є налаштування контролера призначених для користувача навігації в моєму додатку, яке змінює navigationBarїй titleTextAttributes, tintColorі інші в залежності від різних сценаріїв.

Запускаючи додаток на iOS 13, backBarButtonItemстрілка мала кольоровий відтінок синього кольору. Налагоджувач виду показав, що тільки UIBarButtonItems UIImageViewмали цей синій відтінок.

Що я в кінцевому підсумку робив - це встановити navigationBar.tintColorдвічі, щоб він міг змінити колір ...

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)

    }


Найбільш дивною частиною пошуку рішення був невідповідний результат, що змушує мене думати, що це стосується перегляду життєвого циклу та / або анімації зовнішнього вигляду або кешу Xcode :)


2
Не можу повірити в усі виправлення, які нам потрібно зробити, щоб підтримати iOS 13: / Дякую за виправлену версію!
Sreejith

Дивно, я не повинен встановити його .noneабо nilя просто дати йому колір після установки зовнішнього вигляду, і він просто працює
Mark
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.