Tüm yanıtlar ayarı UINavigationBar.appearance().tintColor, Apple'ın içindeki belgelerle çakışıyor UIAppearance.h.
İOS7 için not: iOS7'de tintColormülk taşınmıştır UIViewve şimdi özel bir kalıtsal davranış açıklanmıştır UIView.h. Bu kalıtsal davranış, görünüm proxy'siyle çakışabilir ve bu nedenle tintColorartık görünüm proxy'sine izin verilmez.
Xcode'da, üstbilgi dosyasını incelemek ve özelliğin açıklamalı olduğundan emin olmak için görünüm proxy'si ile kullanmak istediğiniz her özelliğe komut tıklatmanız gerekir UI_APPEARANCE_SELECTOR.
Bu nedenle, gezinme çubuğu morunu ve görünüm proxy'si aracılığıyla uygulama boyunca beyaz başlığı ve düğmeleri beyazlaştırmanın doğru yolu:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Bunun UIBarButtonItembir alt sınıf UIViewdeğil, daha çok olduğunu unutmayın NSObject. Yani onun tintColormülkiyet miras değil tintColorgelen UIView.
Ne yazık ki, UIBarButtonItem.tintColoraçıklamalı değil UI_APPEARANCE_SELECTOR- ama bana bir belge hatası gibi görünüyor. Apple Engineering'in bu radardaki cevabı desteklendiğini belirtiyor.