2017-09-17 25 views
5

Gezinme çubuğumdaki bilgi istemi rengini değiştiremiyorum. Aşağıdaki kodu viewDidLoad'da denedim, ancak hiçbir şey olmuyor. UINavigationBar komut istemi rengini değiştiremiyorsunuz

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white] 

navigation bar image

Ben bir şey eksik? Kod yanlış mı?

+0

deneyin 'NavigationController .navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]?' '4 hızlı titleTextAttributes' olarak – Joe

+0

ait bir görünümü proxy kullanarak (istenen arka plan rengi) gibi diğer renk özelliklerini ayarlamak '[NSAttributedStringKey: Any]?' yazın. 'NSForegroundColorAttributeName' bir dizedir, böylece bu şekilde oluşturulmaz. – Jake

cevap

7

görünüyor. Ben radar # bulundum

iOS 11. isteği metni stil UIAppearance kullanmak gerekir 34758558 titleTextAttributes özellik sadece iOS istemi için çalışmayı durdurdu 11.

iyi haber bir olmasıdır biz Xcode görüşüne hiyerarşisi ayıklayıcısını kullanarak ortaya çıkarabilir geçici çözümlerden, çift:

Screenshot of UINavigation Bar Prompt on iOS 11

// 1. This works, but potentially changes *all* labels in the navigation bar. 
// If you want this, it works. 
UILabel.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).textColor = UIColor.white 

istemi sadece UILabel olduğunu. UIAppearance'ın whenContainedInInstancesOf:'unu kullanırsak, rengi istediğimiz gibi kolayca güncelleyebiliriz.

Eğer yakından bakarsanız, UILabel üzerinde bir sarıcı görünümünün de olduğunu fark edeceksiniz. Bu UIAppearance cevap olabilir kendi sınıfını ... vardır

Screenshot of private UINavigationBar subview

// 2. This is a more precise workaround but it requires using a private class. 

if let promptClass = NSClassFromString("_UINavigationBarModernPromptView") as? UIAppearanceContainer.Type 
{ 
    UILabel.appearance(whenContainedInInstancesOf: [promptClass]).textColor = UIColor.white 
} 

, özel API kullanmaz beri, daha genel çözüme yapışmasını öneriyorum

. (Uygulama inceleme, vb) bu ​​iki çözümlerden birini ile ne olsun göz atın: Ben iOS 11 istemi renk beyaz yapmak başardı

Properly colored prompt text

0

bu deneyin: - Bu bir hakkında haklısın gibi>

navController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.red] 
+0

Swift 4 'titleTextAttributes' türünde' [NSAttributedStringKey: Any]? '. 'NSAttributedStringKey.foregroundColor.rawValue' bir' String''dir. Kodunuz Swift 4. – Jake

+0

NavigationController içinde derlemek olmaz .navigationBar.prefersLargeTitles = true Düzenleme Eğer UINavigationBar yeni largeTitleTextAttributes özelliğini kullanmak gerekir geniş başlığın metin niteliklerini değiştirmek gerekiyorsa:? UINavigationBar.appearance() largeTitleTextAttributes = [ NSForegroundColorAttributeName: UIColor.white ] – arpita

+0

iOS11'de (xCode 9.0.0) çalışmamaktadır. Büyük başlık rengini değiştirir, ancak komut istemini değil! – Lubbo

4

siyaha barStyle batıyordu.

myNavbar.barStyle = UIBarStyleBlack; // Objective-C 
myNavbar.barStyle = .black // Swift 
İlgili konular