Вручную переключите NavigationBar в темный режим - PullRequest
0 голосов
/ 21 января 2020

В моем приложении у меня есть ручной переключатель на go между светлым / темным режимом, и я пытаюсь сделать это sh, чтобы навигационная панель имела вид «темного режима» (белый текст / значки и черный фон) срабатывает, когда мне нужно переключиться между светлым / темным.

Я попробовал все ниже:

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UINavigationBar.appearance().tintColor=UIColor.white

self.navigationController?.navigationBar.barTintColor=UIColor.white
self.navigationController?.navigationBar.titleTextAttributes=[NSAttributedString.Key.foregroundColor:UIColor.white]

И панель навигации никогда не меняется, когда вводится любой из приведенных выше кодов.

Как правильно чтобы выполнить 1011 * это?

1 Ответ

0 голосов
/ 22 января 2020

Невозможно изменить полосу на собственный локальный темный режим с помощью одной простой линии. Но мы можем написать функцию, которая делает что-то похожее на то, что вы хотите. Обратите внимание, что правильный способ сделать это - добавить переключатель стиля и цветов, которые используют коллекцию признаков, чтобы переключаться между различными глобальными визуальными режимами.

extension UIViewController {

    enum NavigationBarStyle {
        case dark, light
    }

    func setNavigationBar(style: NavigationBarStyle) {

        guard let bar = view.subviews.first(where: { return $0 is UINavigationBar }) as? UINavigationBar else { return }

        func set(item: UINavigationItem, color: UIColor) {
            item.rightBarButtonItem?.tintColor = color
            item.leftBarButtonItem?.tintColor = color
        }

        bar.barStyle = style == .dark ? .black : default

        let color: UIColor = style == .dark ? .white : .black
        for item in bar.items ?? [] {
            bar.titleTextAttributes = [.foregroundColor: color]
            set(item: item, color: color)
        }

    }

}

Вам нужно будет сделать уверен, что вы уже добавили панель навигации в подпредставление контроллера. Я сделал что-то подобное программно, но я представляю, что использовать интерфейсный конструктор тоже самое. Использование;

setNavigationBar(style: .dark)
...