Semua jawaban yang UINavigationBar.appearance().tintColorbertentangan dengan dokumentasi Apple di UIAppearance.h.
Catatan untuk iOS7: Di iOS7 tintColorproperti telah pindah ke UIView, dan sekarang memiliki perilaku warisan yang dijelaskan dalam UIView.h. Perilaku yang diwariskan ini dapat bertentangan dengan proksi penampilan, dan karenanya tintColorsekarang tidak diizinkan dengan proksi penampilan.
Di Xcode, Anda perlu mengklik perintah pada setiap properti yang ingin Anda gunakan dengan proxy penampilan untuk memeriksa file header dan memastikan properti tersebut dijelaskan UI_APPEARANCE_SELECTOR.
Jadi cara yang benar untuk mewarnai bilah navigasi ungu dan judul dan tombol putih di seluruh aplikasi melalui proksi penampilan adalah:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Perhatikan bahwa UIBarButtonItemini bukan subkelas UIViewmelainkan NSObject. Jadi yang tintColorproperti tidak mewarisi tintColordari UIView.
Sayangnya, UIBarButtonItem.tintColortidak dijelaskan dengan UI_APPEARANCE_SELECTOR- tetapi menurut saya bug dokumentasi. Tanggapan dari Apple Engineering dalam radar ini menyatakan itu didukung.