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