Todas las respuestas están en UINavigationBar.appearance().tintColorconflicto con la documentación de Apple en UIAppearance.h.
Nota para iOS7: en iOS7, la tintColorpropiedad 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 tintColorlo 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 UIBarButtonItemno es una subclase de, UIViewsino más bien NSObject. Entonces su tintColorpropiedad no es la heredada tintColorde UIView.
Desafortunadamente, UIBarButtonItem.tintColorno 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.