Semua jawaban yang UINavigationBar.appearance().tintColor
bertentangan dengan dokumentasi Apple di UIAppearance.h
.
Catatan untuk iOS7: Di iOS7 tintColor
properti 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 tintColor
sekarang 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 UIBarButtonItem
ini bukan subkelas UIView
melainkan NSObject
. Jadi yang tintColor
properti tidak mewarisi tintColor
dari UIView
.
Sayangnya, UIBarButtonItem.tintColor
tidak dijelaskan dengan UI_APPEARANCE_SELECTOR
- tetapi menurut saya bug dokumentasi. Tanggapan dari Apple Engineering dalam radar ini menyatakan itu didukung.