J'ai une exigence dans laquelle je dois utiliser une UINavigationBar
avec un gros titre rouge.
Actuellement, j'ai le code suivant:
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]
}
Mais ce n'est pas réellement colorer le titre en rouge. Voici le résultat:
Mais changer prefersLargeTitles
en faux fait la bonne chose et mon titre est rouge.
navController.navigationBar.prefersLargeTitles = false
Je ne suis pas tout à fait sûr qu'il s'agisse d'un bogue, car au moment d'écrire ces lignes, nous en étions encore à la première version bêta, ou s'il s'agissait d'un comportement intentionnel, principalement parce que aucune de mes applications Apple ne colorait les gros titres auparavant. Existe-t-il un moyen d'obtenir que le grand titre ait la couleur que je veux?
Il existe une nouvelle propriété UINavigationBar "largeTitleTextAttribute" qui devrait aider à cela.
Voici un exemple de code que vous pouvez ajouter à votre méthode de contrôleur de vue viewDidLoad
navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
Voici un exemple de code et une capture d'écran sans l'ensemble largeTitleTextAttributes mais barStyle est défini sur.
navigationController?.navigationBar.barStyle = .black
Voici une capture d'écran sans l'ensemble largeTitleTextAttributes, mais barStyle est défini sur .default
navigationController?.navigationBar.barStyle = .default
Je ne sais pas s'il s'agit d'un bogue dans les bêta 1 et 2, mais voici un moyen de définir la couleur C'est un peu une solution de contournement, mais cela devrait fonctionner jusqu'à ce que Apple corrige cela. Dans les versions Objective-C et Swift, ce code est utilisé dans la méthode viewDidAppear:
.
Objectif 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]];
}
}
}
});
Rapide:
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
} } }
Voici le code de travail permettant d’utiliser des titres de grande taille et de définir la couleur du texte des titres de petite taille et de grande taille sur blanc, aussi bien sur iOS11 + que sur les versions iOS antérieures.
// 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
]
}
(Il y avait un bogue dans Xcode, mais il semble maintenant être corrigé)