Усі налаштування відповідей 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 на цьому радарі стверджує, що вона підтримується.