2009-10-09 7 views

Répondre

3

Vous pouvez affecter n'importe quelle UIView à la zone de titre d'un contrôleur de nav.

Créez un UILabel et définissez sa police et sa taille comme vous le souhaitez, puis affectez-le à la propriété navigationItem.titleView du UIViewController. Assurez-vous que la propriété backgroundColor de UILabel est définie sur clearColor.

Cela ne fonctionne que sur la vue nav de plus haut niveau. Lorsque l'utilisateur descend dans la hiérarchie du contrôleur de vue et que le bouton "Précédent" est affiché, le titre alternatif est ignoré et l'étiquette de texte normale est affichée.

+0

Y at-il un moyen de définir la taille des polices, etc. pour les barres de titre * drill-down *? – user141146

+0

Les docs officiels disent que les vues de titres sont ignorées (probablement parce qu'ils veulent que l'utilisateur voit le texte avant qu'il n'apparaisse dans le bouton 'arrière' du niveau suivant.) Mais vous pouvez toujours essayer de surcharger viewDidLoad et scanner récursivement la hiérarchie de vue de NavBar jusqu'à ce que vous trouviez le UILabel correct puis définissez la police sur cela. – Ramin

17

la bonne façon de redimensionner le texte du titre d'un NavController est de définir la propriété titleview du navigationItem

comme celui-ci (en viewDidLoad)

UILabel* tlabel=[[UILabel alloc] initWithFrame:CGRectMake(0,0, 300, 40)]; 
     tlabel.text=self.navigationItem.title; 
    tlabel.textColor=[UIColor whiteColor]; 
    tlabel.backgroundColor =[UIColor clearColor]; 
    tlabel.adjustsFontSizeToFitWidth=YES; 
    self.navigationItem.titleView=tlabel; 
4

Vous pouvez vouloir gaufrer l'étiquette il ne semble pas floue et plat:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect frame = CGRectMake(0, 0, 400, 44); 
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [UIFont boldSystemFontOfSize:18.0]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor whiteColor]; 
    label.text = self.navigationItem.title; 
    // emboss so that the label looks OK 
    [label setShadowColor:[UIColor darkGrayColor]]; 
    [label setShadowOffset:CGSizeMake(0, -0.5)]; 
    self.navigationItem.titleView = label; 
} 
+0

aussi bien fait pour l'ajout de textAlignment –

+0

Je ne sais pas ce qu'est FontHelper, donc j'ai utilisé: 'label.font = [UIFont boldSystemFontOfSize: 18.0];' Cela semble assez proche de la police d'origine pour le titre de la barre de navigation. – Ginny

+0

@Ginny - désolé à ce sujet, je n'ai pas remarqué que je suis parti dans un appel à ma propre classe FontHelper! –

3

SI vous voulez que cela fonctionne à la fois sur iPhone et iPad, et également obtenir le titre puis utilisez le centré code suivant.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UILabel* label=[[UILabel alloc] initWithFrame:CGRectMake(0,0, self.navigationItem.titleView.frame.size.width, 40)]; 
    label.text=self.navigationItem.title; 
    label.textColor=[UIColor whiteColor]; 
    label.backgroundColor =[UIColor clearColor]; 
    label.adjustsFontSizeToFitWidth=YES; 
    label.font = [AppHelper titleFont]; 
    label.textAlignment = NSTextAlignmentCenter; 
    self.navigationItem.titleView=label; 
} 
Questions connexes