Все настройки ответов UINavigationBar.appearance().tintColorпротиворечат документации Apple в UIAppearance.h.
Примечание для iOS7: на iOS7 tintColorсвойство переместилось в UIView, и теперь имеет особое наследуемое поведение, описанное в UIView.h. Это унаследованное поведение может вступать в конфликт с прокси-сервером внешнего вида и поэтому tintColorне разрешено с прокси-сервером внешнего вида.
В XCode вам нужно щелкнуть по команде каждое свойство, которое вы хотите использовать с прокси внешнего вида, чтобы проверить файл заголовка и убедиться, что свойство помечено UI_APPEARANCE_SELECTOR.
Таким образом, правильный способ окрасить панель навигации в фиолетовый цвет, а заголовок и кнопки - по всему приложению через прокси внешнего вида:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Обратите внимание, что UIBarButtonItemэто не подкласс, UIViewа скорее NSObject. Так что его tintColorсобственность не наследуется tintColorот UIView.
К сожалению, UIBarButtonItem.tintColorэто не аннотировано UI_APPEARANCE_SELECTOR- но это мне кажется ошибкой документации. Ответ от Apple Engineering на этом радаре гласит, что он поддерживается.