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.

Callum
la source
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
Pour IOS 13 stackoverflow.com/a/61141195/6108739
Vladyslav Panchenko

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.

Steven Fisher
la source
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];
Alex RR
la source
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]};
minux
la source
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.

Erik B
la source
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.

girish_vr
la source
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];
Pramesh
la source
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

Michal
la source
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()
fujianjin6471
la source
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
Casebash
la source
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]];
Sandeep
la source
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

Microos
la source
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.
}
Gaurav Gilani
la source
9

Court et doux.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Pier-Luc Gendreau
la source
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

Anthony Main
la source
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);
coryjacobsen
la source
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 :)

Brillant
la source
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];
    }
}
Ramesh
la source
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;
Abdullah Saeed
la source
5

Cela fonctionne pour moi dans Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
zumzum
la source
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]
Patricio Bravo
la source
4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Paresh Hirpara
la source
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;
Shefali Soni
la source
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];
phatblat
la source
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.

stringCode
la source
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];
Nikesh K
la source
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.

David McGraw
la source
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;
John
la source
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.

George
la source
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;
}
sinh99
la source
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

tremper
la source