Todas las respuestas están en UINavigationBar.appearance().tintColor
conflicto con la documentación de Apple en UIAppearance.h
.
Nota para iOS7: en iOS7, la tintColor
propiedad se ha movido a UIView
, y ahora tiene un comportamiento heredado especial descrito en UIView.h
. Este comportamiento heredado puede entrar en conflicto con el proxy de apariencia y, por tintColor
lo tanto, ahora no está permitido con el proxy de apariencia.
En Xcode, debe hacer clic en cada propiedad que desea usar con el proxy de apariencia para inspeccionar el archivo de encabezado y asegurarse de que la propiedad esté anotada UI_APPEARANCE_SELECTOR
.
Entonces, la forma correcta de colorear la barra de navegación de color púrpura y el título y los botones de color blanco en toda la aplicación a través del proxy de apariencia es:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Tenga en cuenta que UIBarButtonItem
no es una subclase de, UIView
sino más bien NSObject
. Entonces su tintColor
propiedad no es la heredada tintColor
de UIView
.
Desafortunadamente, UIBarButtonItem.tintColor
no está anotado con UI_APPEARANCE_SELECTOR
, pero eso me parece un error de documentación. La respuesta de Apple Engineering en este radar indica que es compatible.