2017-06-18 45 views
8

Kırmızı büyük bir başlık ile UINavigationBar kullanmam gereken bir gereksinim var."prefersLargeTitles" öğesi true olarak ayarlandığında gezinti çubuğu başlığının metin rengini değiştirme

Şu anda, aşağıdaki kodu vardır:

func prepareNavigationController() { 
    let navController = UINavigationController(rootViewController: self) 
    navController.navigationBar.prefersLargeTitles = true 
    navigationItem.searchController = UISearchController(searchResultsController: nil) 
    navigationItem.hidesSearchBarWhenScrolling = false 
    navController.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.red] 
} 

Ama aslında kırmızıya başlık etiketi tinting değil. Bu sonuç ise: false

Ignored title color

Ama değişen prefersLargeTitles doğru olanı yapar ve benim başlık kırmızıdır.

navController.navigationBar.prefersLargeTitles = false

Tinted Title

Bu biz ilk beta hala bu yazının yazıldığı anda beri bir hata olduğunu veya tamamen emin değilim bu kasıtlı davranış, çoğunlukla çünkü cenneti ise Apple'ın uygulamalarından herhangi biri daha önce büyük başlıkları renklendirir. Büyük başlığı, istediğim rengin olması için almanın bir yolu var mı?

+0

Ben aynı şeyi arayan ediyorum! Ve bunu nasıl değiştireceğimi henüz anlamadım, belki de ilk beta Apple henüz uygulamaya koymadığı için. – Philippe

+0

Belki bu doğru bir cevap olabilir https://stackoverflow.com/a/46007201/7048642 –

cevap

13

bu konuda yardım gereken yeni UINavigationBar özelliği "largeTitleTextAttribute" yoktur. İşte

largeTitleTextAttribute

Eğer görünüm denetleyicileri ekleyebileceğiniz bir örnek kod viewDidLoad yöntem

 navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue] 
İşte

enter image description here

largeTitleTextAttributes set vermeden bir örnek kod ve ekran görüntüsü, ama barStyle olduğunu .black olarak ayarlanır. İşte

enter image description here

largeTitleTextAttributes set vermeden bir ekran görüntüsü olduğunu, ancak barStyle

 navigationController?.navigationBar.barStyle = .default 
İşte

enter image description here

+0

İlginç. Beta 3'te bu yeni mi? Henüz indirmedim ama şimdi yapacağım ve kontrol edeceğim. –

+0

Evet, yeni beta 3 ya da en azından şimdi farkettim. – assb10yr

+0

Birkaç saat içinde onaylayacağım (yavaş internet), çünkü sembol Beta 2'de mevcut değil. –

2

Beta 1 & 2'de bir hata olup olmadığından emin değilsiniz, ancak burada rengi ayarlamanın bir yoludur. Bu biraz "hacky" bir çözümdür, ancak Apple bunu düzeltene kadar çalışmalıdır. Hem Objective-C hem de Swift sürümünde, bu kod viewDidAppear: yönteminde gider.

Objective-C:

dispatch_async(dispatch_get_main_queue(), ^{ 
    for (UIView *view in self.navigationController.navigationBar.subviews) { 
     NSArray <__kindof UIView *> *subviews = view.subviews; 
     if (subviews.count > 0) { 
      UILabel *label = subviews[0]; 
      if (label.class == [UILabel class]) { 
       [label setTextColor:[UIColor redColor]]; 
      } 
     } 
    } 
}); 

Swift:

DispatchQueue.main.async { 
    for view in self.navigationController?.navigationBar.subviews ?? [] { 
    let subviews = view.subviews 
    if subviews.count > 0, let label = subviews[0] as? UILabel { 
      label.textColor = UIColor.red 
} } } 
0

büyük başlıklar kullanmak çalışma kod .default'a olarak ayarlanır ve metin rengini ayarlar iOS11 + 'da ve daha eski iOS sürümlerinde küçük ve büyük başlıklar beyazdır.

// Will apply to versions before iOS 11 
navigationController?.navigationBar.titleTextAttributes = [ 
    NSAttributedStringKey.foregroundColor: UIColor.white 
] 

if #available(iOS 11.0, *) { 
    navigationController?.navigationBar.prefersLargeTitles = true 
    navigationController?.navigationBar.largeTitleTextAttributes = [ 
     NSAttributedStringKey.foregroundColor: UIColor.white 
    ] 
} 

(Xcode bir hata olması için kullanılır, ama artık sabit gibi görünen)