Как сразу применить tintColor к тексту кнопки навигации назад iOS - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю над приложением для iOS, которое позволяет пользователю изменять основной цвет акцента. Когда пользователь выбирает цвет акцента, все отображаемые в данный момент элементы, содержащие цвет акцента, должны быть обновлены. У меня есть решение, которое работает для всего, кроме текста кнопки «Назад» на панели навигации. Я могу изменить цвет текста заголовка, а левый карат меняет цвет, как и ожидалось.

Когда я использую код ниже, левый карат немедленно изменяется, но текст рядом с ним - нет.

self.navigationController?.navigationBar.tintColor = accentColor
self.navigationController?.navigationBar.barTintColor = navBarColor
self.navigationController?.navigationBar.titleTextAttributes = [
        NSAttributedStringKey.foregroundColor: anotherColor,
        NSAttributedStringKey.font: someFont
    ];

Кроме того, до вышеприведенного кода прокси-серверу UIAppearance для UIBarButtonItem был установлен titleTextAttributes - но это не относится к представлениям, которые уже отображаются.

Что мне здесь не хватает? Если представление полностью отклоняется и перезагружается, текст кнопки «Назад» приобретает цвет tintColor. Есть ли способ сделать это без добавления пользовательского backBarButtonItem?

iOS 9+ - быстрое решение приветствуется, но с objc тоже все в порядке. Эта часть приложения основана на раскадровке.

РЕДАКТИРОВАТЬ : обновленный код и описание.

ОБНОВЛЕНИЕ : Поведение отличается между iOS 11.2 и 10.3. В iOS 11.2 цвет текста кнопки левой и правой панели не обновляется в зависимости от оттенка для любого из представлений в стеке, пока они не будут перезагружены. В iOS 10.3 цвета обновляются, но не для видимого вида.

...