Todas as respostas configuradas UINavigationBar.appearance().tintColor
entram em conflito com a documentação da Apple em UIAppearance.h
.
Nota para iOS7: no iOS7, a tintColor
propriedade foi movida para UIView
e agora possui um comportamento herdado especial descrito em UIView.h
. Esse comportamento herdado pode entrar em conflito com o proxy de aparência e, portanto, tintColor
agora não é permitido com o proxy de aparência.
No Xcode, você precisa clicar com o botão direito do mouse em cada propriedade que deseja usar com o proxy de aparência para inspecionar o arquivo de cabeçalho e garantir que a propriedade esteja anotada UI_APPEARANCE_SELECTOR
.
Portanto, a maneira correta de colorir a barra de navegação de roxo e o título e os botões brancos em todo o aplicativo por meio do proxy de aparência é:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Observe que UIBarButtonItem
não é uma subclasse de UIView
mas sim NSObject
. Portanto, sua tintColor
propriedade não é a herdada tintColor
de UIView
.
Infelizmente, UIBarButtonItem.tintColor
não é anotado com UI_APPEARANCE_SELECTOR
- mas isso me parece um bug de documentação. A resposta da Apple Engineering neste radar afirma que é suportada.