Все настройки ответов 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 на этом радаре гласит, что он поддерживается.