Я работаю над приложением для 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 цвета обновляются, но не для видимого вида.