Couleur du texte du titre de la barre de navigation iPhone


283

Il semble que la couleur du titre de la barre de navigation iOS soit blanche par défaut. Existe-t-il un moyen de le changer en une couleur différente?

Je connais l' navigationItem.titleViewapproche utilisant une image. Étant donné que mes compétences en conception sont limitées et que je n'ai pas réussi à obtenir le brillant standard, je préfère changer la couleur du texte.

Toute opinion serait très appréciée.


Je viens de publier un morceau de code, basé sur la réponse de Steven Fisher, qui simplifie le processus d'ajout de titres colorés personnalisés à votre barre de navigation. Il prend également en charge la modification du titre. Chercher! Cela ne vous décevra pas.
Erik B

1
Erik: J'ai mis une note sur votre réponse dans la mienne. Je mettrais à jour ma réponse avec votre code, mais je ne voudrais pas prendre vos votes. Solution intelligente, btw.
Steven Fisher

Réponses:


423

Une approche moderne

De façon moderne, pour l'ensemble du contrôleur de navigation… faites-le une fois, lorsque la vue racine de votre contrôleur de navigation est chargée.

[self.navigationController.navigationBar setTitleTextAttributes:
   @{NSForegroundColorAttributeName:[UIColor yellowColor]}];

Cependant, cela ne semble pas avoir d'effet dans les vues suivantes.

Approche classique

À l'ancienne, par contrôleur de vue (ces constantes sont pour iOS 6, mais si vous voulez le faire par contrôleur de vue sous iOS 7, vous voudrez la même approche mais avec des constantes différentes):

Vous devez utiliser un UILabelcomme titleViewle navigationItem.

L'étiquette doit:

  • Avoir une couleur d'arrière-plan claire ( label.backgroundColor = [UIColor clearColor]).
  • Utilisez une police système en gras de 20 points ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Avoir une ombre de noir avec 50% d'alpha ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Vous souhaiterez également définir l'alignement du texte sur centré ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterpour les SDK plus anciens).

Définissez la couleur du texte de l'étiquette pour qu'elle soit de la couleur personnalisée que vous souhaitez. Vous voulez une couleur qui ne fasse pas fondre le texte dans l'ombre, ce qui serait difficile à lire.

J'ai travaillé cela par essais et erreurs, mais les valeurs que j'ai trouvées sont finalement trop simples pour qu'elles ne soient pas celles qu'Apple a choisies. :)

Si vous voulez vérifier cela, déposez ce code dans initWithNibName:bundle:dans l'exemple NavBarPageThreeViewController.m d' Apple . Cela remplacera le texte par une étiquette jaune. Cela ne doit pas être distingué de l'original produit par le code d'Apple, à l'exception de la couleur.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // this will appear as the title in the navigation bar
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont boldSystemFontOfSize:20.0];
        label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
        label.textAlignment = NSTextAlignmentCenter;
                           // ^-Use UITextAlignmentCenter for older SDKs.
        label.textColor = [UIColor yellowColor]; // change this color
        self.navigationItem.titleView = label;
        label.text = NSLocalizedString(@"PageThreeTitle", @"");
        [label sizeToFit];
    }

    return self;
}

Edit: Lisez également la réponse d'Erik B ci-dessous. Mon code montre l'effet, mais son code offre un moyen plus simple de le mettre en place sur un contrôleur de vue existant.


2
Si vous définissez le cadre d'étiquette à la taille de son texte à l'aide sizeWithFont:, il prendra comme par magie le comportement d'alignement automatique de l'étiquette standard.
grahamparks

1
Mais si vous utilisez sizeToFit, vous perdrez la troncature automatique.
Steven Fisher

3
REMARQUE: c'est l'ancienne façon de définir le titre personnalisé, je suggère de lire la réponse d'Erik B.
Elia Palme

1
Confirmé que sizeToFit fonctionne, donc réponse mise à jour. Aussi, ajouté une note pour lire la réponse d'Erik B.
Steven Fisher

1
label.textAlignment = UITextAlignmentCenter est obsolète depuis iOS6.0, utilisez plutôt NSTextAlignmentCenter
Jasper

226

Je sais que c'est un fil assez ancien, mais je pense qu'il serait utile de savoir pour les nouveaux utilisateurs qu'iOS 5 apporte une nouvelle propriété pour établir les propriétés du titre.

Vous pouvez utiliser UINavigationBar setTitleTextAttributespour définir la police, la couleur, le décalage et la couleur de l'ombre.

De plus, vous pouvez définir les mêmes attributs de texte de titre par défaut de UINavigationBar pour l' UINavigationBarsensemble de votre application.

Par exemple comme ça:

NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                            [UIColor whiteColor],UITextAttributeTextColor, 
                                            [UIColor blackColor], UITextAttributeTextShadowColor, 
                                            [NSValue valueWithUIOffset:UIOffsetMake(-1, 0)], UITextAttributeTextShadowOffset, nil];

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

11
'UITextAttributeTextColor' est déconseillé dans iOS 7. La clé iOS 7 est 'NSForegroundColorAttributeName'
Keller

1
Notez que cela changera TOUTES les barres de navigation, ce qui est généralement ce que vous souhaitez de toute façon.
Ash

1
Veuillez marquer cela comme la bonne réponse - la méthode UILabel ci-dessus n'est pas nécessaire avec ces méthodes disponibles.
Mic Fok

180

Dans iOS 5, vous pouvez modifier la couleur du titre navigationBar de la manière suivante:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

8
@ BartSimpson, je suis d'accord! Pour iOS 7, mettez UITextAttributeTextColorà jour vers NSForegroundColorAttributeName. Fonctionne comme un charme!
John Erck

CELA MARCHE! ce que je veux comprendre, c'est comment?! titleTextAttributes exclut un dictionnaire avec un ensemble prédéfini de clés mentionné dans «Clés pour les dictionnaires d'attributs de texte» mentionné sous «NSString UIKit Additions Reference». Comment faut-il prendre la clé que vous avez mentionnée.
1er

... et comme cela fonctionne, comment puis-je obtenir la teinte "par défaut"?
AceN

Le réglage self.navigationController.navigationBar.tintColorn'a pas fonctionné pour moi. C'était le cas.
JRam13

127

Sur la base de la réponse de Steven Fisher, j'ai écrit ce morceau de code:

- (void)setTitle:(NSString *)title
{
    [super setTitle:title];
    UILabel *titleView = (UILabel *)self.navigationItem.titleView;
    if (!titleView) {
        titleView = [[UILabel alloc] initWithFrame:CGRectZero];
        titleView.backgroundColor = [UIColor clearColor];
        titleView.font = [UIFont boldSystemFontOfSize:20.0];
        titleView.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];

        titleView.textColor = [UIColor yellowColor]; // Change to desired color

        self.navigationItem.titleView = titleView;
        [titleView release];
    }
    titleView.text = title;
    [titleView sizeToFit];
}

L'avantage de ce code, en plus de traiter correctement le cadre, est que si vous changez le titre de votre contrôleur, la vue de titre personnalisée sera également mise à jour. Pas besoin de le mettre à jour manuellement.

Un autre gros avantage est qu'il rend très simple l'activation de la couleur de titre personnalisée. Tout ce que vous devez faire est d'ajouter cette méthode au contrôleur.


3
Je suis d'accord que celle-ci est définitivement la meilleure solution. Pas besoin d'utiliser sizeWithFont, et j'aime l'idée de remplacer la méthode setTitle.
Elia Palme

@ Sr.Richie Vous ne devez pas mettre le code dans un contrôleur de navigation personnalisé. Vous devez le mettre dans tous les contrôleurs de vue où vous devez changer la couleur du titre. Vous ne voulez probablement même pas un contrôleur de navigation personnalisé.
Erik B

Ça ne marche pas pour moi. Je pense que c'est parce que j'ai utilisé la méthode [UINavigationBar apparence] .. (ne fonctionne pas car le label titleView est toujours nul)
Matej

1
Si vous utilisez iOS5 ou une version ultérieure, vous devriez lire la réponse de moins ci-dessous. Il y a un aller simple qui fonctionne bien et reste sur la réservation.
algal

nous devons ajouter self.title = @ "notre chaîne"; dans viewDidLoad.alors seulement le code ci-dessus fonctionne.
Hari1251

40

La plupart des suggestions ci-dessus sont désormais obsolètes, pour une utilisation iOS 7 -

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                               [UIColor whiteColor],NSForegroundColorAttributeName, 
                               [UIColor whiteColor],NSBackgroundColorAttributeName,nil];

self.navigationController.navigationBar.titleTextAttributes = textAttributes;
self.title = @"Title of the Page";

Vérifiez également le NSAttributedString.h pour les différentes propriétés de texte qui peuvent être définies.


38

Dans IOS 7 et 8, vous pouvez changer la couleur du titre en disons vert

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];

6
Swift:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee

@ByronCoetsee après la mise à jour vers Swift 2 J'ai l'erreur suivante: Impossible d'attribuer une valeur de type '[NSObject: AnyObject]' à une valeur de type '[String: AnyObject]?' '
Jorge Casariego

2
Beaucoup plus facile dans swift 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia

24

Pour garder la question à jour, j'ajouterai la solution Alex RR , mais dans Swift :

self.navigationController.navigationBar.barTintColor = .blueColor()
self.navigationController.navigationBar.tintColor = .whiteColor()
self.navigationController.navigationBar.titleTextAttributes = [
    NSForegroundColorAttributeName : UIColor.whiteColor()
]

Résultat:

entrez la description de l'image ici


Hmmm, peut-être que cela ne fonctionne pas pour Swift 2.0. Permettez-moi de vérifier à nouveau. Pas besoin d'agression cependant.
Michal

Désolé Michal, je pensais ça comme une blague! Pas comme quelque chose d'agressif! Ce qui a fonctionné pour moi était plus comme ceci: self.navigationController! .NavigationBar.titleTextAttributes = NSDictionary (objet: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) en tant que [NSObject: AnyObject]
Radu

Ajoutez cette ligne suivante: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Avant cette ligne: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Pour que tintColor fonctionne!
triiiiista

2
Dans Swift 4.0: self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Abhi Muktheeswarar

14

Méthode 1 , définissez-le dans IB:

entrez la description de l'image ici

Méthode 2 , une ligne de code:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()

la méthode 2 ne fonctionne pas. Fonctionne avec titleTextAttributesseulement
Vyachaslav Gerchicov

13

La solution de tewha fonctionne bien si vous essayez de changer la couleur sur une page, mais je veux pouvoir changer la couleur sur chaque page. J'ai fait quelques petites modifications pour que cela fonctionne pour toutes les pages sur unUINavigationController

NavigationDelegate.h

//This will change the color of the navigation bar
#import <Foundation/Foundation.h>
@interface NavigationDelegate : NSObject<UINavigationControllerDelegate> {
}
@end

NavigationDelegate.m

#import "NavigationDelegate.h"
@implementation NavigationDelegate

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    CGRect frame = CGRectMake(0, 0, 200, 44);//TODO: Can we get the size of the text?
    UILabel* label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    //The two lines below are the only ones that have changed
    label.text=viewController.title;
    viewController.navigationItem.titleView = label;
}
@end

13

À partir d'iOS 5, nous devons définir la couleur du texte du titre et la police de la barre de navigation à l'aide du dictionnaire titleTextAttribute (dictionnaire prédéfini dans la référence de classe du contrôleur UInavigation).

 [[UINavigationBar appearance] setTitleTextAttributes:
 [NSDictionary dictionaryWithObjectsAndKeys:
  [UIColor blackColor],UITextAttributeTextColor, 
[UIFont fontWithName:@"ArialMT" size:16.0], UITextAttributeFont,nil]];

13

Version rapide

J'ai trouvé que la plupart d'entre vous ont présenté les réponses de la version Objective_C

Je voudrais implémenter cette fonction en utilisant Swift pour tous ceux qui en ont besoin.

Dans ViewDidload

1.Pour que l'arrière-plan de la barre de navigation devienne couleur (par exemple: BLEU)

self.navigationController?.navigationBar.barTintColor = UIColor.blueColor()

2.Pour que l'arrière-plan NavigationBar devienne Image (par exemple: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

self.navigationController?.navigationBar
      .setBackgroundImage(UIImage(named: "ABC"), forBarMetrics: barMetrix)

3.Pour changer le titre de la barre de navigation (par exemple: [Police: Futura, 10] [Couleur: Rouge])

navigationController?.navigationBar.titleTextAttributes = [
            NSForegroundColorAttributeName : UIColor.redColor(),
            NSFontAttributeName : UIFont(name: "Futura", size: 10)!
        ]

(indice 1: n'oubliez pas la marque "!" après l'UIFont)

(indice 2: il y a beaucoup d'attributs du texte du titre, cliquez sur la commande "NSFontAttributeName", vous pouvez entrer la classe et afficher les noms de clés et les types d'objets requis)

J'espère que je peux aider!: D


10

Utilisez le code ci-dessous dans n'importe quelle méthode viewDidLoad ou viewWillAppear du contrôleur de vue.

- (void)viewDidLoad
{
    [super viewDidLoad];

    //I am using UIColor yellowColor for an example but you can use whatever color you like   
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};

    //change the title here to whatever you like
    self.title = @"Home";
    // Do any additional setup after loading the view.
}

9

Court et doux.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];

8

Ceci est ma solution basée sur Stevens

La seule vraie différence est que je mets un peu de manipulation pour ajuster la position si, selon la longueur du texte, cela semble être similaire à la façon dont Apple le fait

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft), 0, 480,44)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.font = [UIFont boldSystemFontOfSize: 20.0f];
titleLabel.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
titleLabel.textAlignment = ([self.title length] < 10 ? UITextAlignmentCenter : UITextAlignmentLeft);
titleLabel.textColor = [UIColor redColor];
titleLabel.text = self.title;
self.navigationItem.titleView = titleLabel;
[titleLabel release];

Vous souhaiterez peut-être ajuster la valeur 10 en fonction de la taille de votre police


6

J'ai rencontré le problème avec mes boutons de navigation jetant le texte hors du centre (quand vous n'avez qu'un seul bouton). Pour résoudre ce problème, je viens de changer la taille de mon cadre comme suit:

CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);

6

J'ai personnalisé l'image d'arrière-plan de navigationBar et l'élément de bouton gauche, et le titre gris ne correspond pas à l'arrière-plan. Ensuite j'utilise:

[self.navigationBar setTintColor:[UIColor darkGrayColor]];

pour changer la couleur de la teinte en gris. Et le titre est blanc maintenant! C'est ce que je veux.

Au plaisir d'aider aussi :)


Bien mais cela ne fonctionne que pour changer le texte en blanc. Même la coloration de la barre de navigation avec [UIColor whiteColor] change la couleur du texte en blanc.
cschuff

6

Il est recommandé de définir self.title car il est utilisé lorsque vous appuyez sur les barres de navigation enfant ou que vous affichez le titre sur les barres de tabulation.

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create and customize title view
        self.title = NSLocalizedString(@"My Custom Title", @"");
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        titleLabel.text = self.title;
        titleLabel.font = [UIFont boldSystemFontOfSize:16];
        titleLabel.backgroundColor = [UIColor clearColor];
        titleLabel.textColor = [UIColor whiteColor];
        [titleLabel sizeToFit];
        self.navigationItem.titleView = titleLabel;
        [titleLabel release];
    }
}

6

Il s'agit d'un fil assez ancien, mais je pense fournir une réponse pour définir la couleur, la taille et la position verticale du titre de la barre de navigation pour iOS 7 et supérieur

Pour la couleur et la taille

 NSDictionary *titleAttributes =@{
                                NSFontAttributeName :[UIFont fontWithName:@"Helvetica-Bold" size:14.0],
                                NSForegroundColorAttributeName : [UIColor whiteColor]
                                };

Pour la position verticale

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-10.0 forBarMetrics:UIBarMetricsDefault];

Définir le titre et attribuer le dictionnaire d'attributs

[[self navigationItem] setTitle:@"CLUBHOUSE"];
self.navigationController.navigationBar.titleTextAttributes = titleAttributes;

5

Cela fonctionne pour moi dans Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]

Assez proche, mais le problème est que votre chemin remplacera tous les attributs possibles déjà sur le titre. Dans mon cas, c'était la police. Le code avec navigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
lequel

Fonctionne bien. self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Idem

5

Version Swift 4 et 4.2:

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]

4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];

3

pour définir la taille de la police du titre, j'ai utilisé les conditions suivantes .. peut-être utile à tout le monde

if ([currentTitle length]>24) msize = 10.0f;
    else if ([currentTitle length]>16) msize = 14.0f;
    else if ([currentTitle length]>12) msize = 18.0f;

3

Une mise à jour du message d'Alex RR utilisant les nouveaux attributs de texte iOS 7 et l'objectif moderne c pour moins de bruit:

NSShadow *titleShadow = [[NSShadow alloc] init];
titleShadow.shadowColor = [UIColor blackColor];
titleShadow.shadowOffset = CGSizeMake(-1, 0);
NSDictionary *navbarTitleTextAttributes = @{NSForegroundColorAttributeName:[UIColor whiteColor],
                                            NSShadowAttributeName:titleShadow};

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];

3

Je crois que la bonne façon de définir la couleur de UINavigationBar:

NSDictionary *attributes=[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor],UITextAttributeTextColor, nil];
self.titleTextAttributes = attributes;

Le code ci-dessus est écrit en sous-classe UINavigationBar, fonctionne évidemment sans sous-classe également.


Correct, mais iOS 5 uniquement. Cela fait assez longtemps depuis la sortie d'iOS 5 que c'est une bonne solution. Et puisque nous sommes dans le monde iOS 5, il convient de noter que l'on peut utiliser [UINavigationBar appearance]et définir des attributs de texte de titre là-bas (compte tenu de la ruse impliquée dans le sous UINavigationBar- classement , une solution préférable).
Ivan Vučica

@stringCode. Pouvez-vous initialiser le code ci-dessus sans "self.navigationController.navigationBar.titleTextAttributes = attributes;"?
Gajendra K Chauhan

3

Utilisez comme ceci pour le support d'orientation

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,40)];
[view setBackgroundColor:[UIColor clearColor]];
[view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];

UILabel *nameLabel = [[UILabel alloc] init];
[nameLabel setFrame:CGRectMake(0, 0, 320, 40)];
[nameLabel setBackgroundColor:[UIColor clearColor]];
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin];
[nameLabel setTextColor:[UIColor whiteColor]];
[nameLabel setFont:[UIFont boldSystemFontOfSize:17]];
[nameLabel setText:titleString];
[nameLabel setTextAlignment:UITextAlignmentCenter];
[view addSubview:nameLabel];
[nameLabel release];
self.navigationItem.titleView = view;
[view release];

2

C'est l'une de ces choses qui manquent. Votre meilleur pari est de créer votre propre barre de navigation personnalisée, d'ajouter une zone de texte et de manipuler la couleur de cette façon.


Je suis votre idée :) quelle méthode dois-je remplacer pour commencer à jouer avec le titre? Désolé, je suis vraiment un n00b :(
Sr.Richie

2

Après avoir rencontré le même problème (que les autres) de l'étiquette qui se déplace lorsque nous insérons un bouton dans la barre de navigation (dans mon cas, j'ai un spinner que je remplace par un bouton lorsque la date est chargée), les solutions ci-dessus n'ont pas fonctionné pour moi, voici donc ce qui a fonctionné et a gardé le label au même endroit tout le temps:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
    // this will appear as the title in the navigation bar
    //CGRect frame = CGRectMake(0, 0, [self.title sizeWithFont:[UIFont boldSystemFontOfSize:20.0]].width, 44);
   CGRect frame = CGRectMake(0, 0, 180, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];



    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont boldSystemFontOfSize:20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor yellowColor];
    self.navigationItem.titleView = label;
    label.text = NSLocalizedString(@"Latest Questions", @"");
    [label sizeToFit];
}

return self;

1

Vous devez appeler [label sizeToFit]; après avoir défini le texte pour éviter des décalages étranges lorsque l'étiquette est automatiquement repositionnée dans la vue du titre lorsque d'autres boutons occupent la barre de navigation.


1

Peut utiliser cette méthode dans le fichier appdelegate et peut utiliser à chaque vue

+(UILabel *) navigationTitleLable:(NSString *)title
{
CGRect frame = CGRectMake(0, 0, 165, 44);
UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.font = NAVIGATION_TITLE_LABLE_SIZE;
label.shadowColor = [UIColor whiteColor];
label.numberOfLines = 2;
label.lineBreakMode = UILineBreakModeTailTruncation;    
label.textAlignment = UITextAlignmentCenter;
[label setShadowOffset:CGSizeMake(0,1)]; 
label.textColor = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1.0];

//label.text = NSLocalizedString(title, @"");

return label;
}

1

titleTextAttributes Affiche les attributs du texte du titre de la barre.

@property (nonatomic, copy) NSDictionary * titleTextAttributes Discussion Vous pouvez spécifier la police, la couleur du texte, la couleur de l'ombre du texte et le décalage de l'ombre du texte pour le titre dans le dictionnaire d'attributs de texte, à l'aide des clés d'attribut de texte décrites dans la référence NSString UIKit Additions Reference.

Disponibilité Disponible dans iOS 5.0 et versions ultérieures. Déclaré dans UINavigationBar.h

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.