Cor do texto do título da barra de navegação do iPhone

283

Parece que a cor do título da barra de navegação do iOS é branca por padrão. Existe uma maneira de mudar para uma cor diferente?

Estou ciente da navigationItem.titleViewabordagem usando uma imagem. Como minhas habilidades de design são limitadas e não obtive o brilho padrão, prefiro alterar a cor do texto.

Qualquer insight seria muito apreciado.

Callum
fonte
Acabei de publicar um código, com base na resposta de Steven Fisher, que simplifica o processo de adição de títulos coloridos personalizados à sua barra de navegação. Ele também suporta a alteração do título. Procure! Não vai decepcioná-lo.
Erik B
1
Erik: Anotei sua resposta na minha. Gostaria de atualizar minha resposta com seu código, mas não gostaria de receber seus votos. Solução inteligente, btw.
Steven Fisher
Para IOS 13 stackoverflow.com/a/61141195/6108739
Vladyslav Panchenko

Respostas:

423

Abordagem moderna

A maneira moderna, para todo o controlador de navegação ... faça isso uma vez, quando a visualização raiz do seu controlador de navegação estiver carregada.

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

No entanto, isso não parece ter efeito nas visualizações subsequentes.

Abordagem clássica

Da maneira antiga, por controlador de visualização (essas constantes são para iOS 6, mas se você quiser fazê-lo por controlador de visualização na aparência do iOS 7, você desejará a mesma abordagem, mas com constantes diferentes):

Você precisa usar um UILabelcomo o titleViewdo navigationItem.

O rótulo deve:

  • Tenha uma cor de fundo clara ( label.backgroundColor = [UIColor clearColor]).
  • Use fonte em negrito do sistema 20pt ( label.font = [UIFont boldSystemFontOfSize: 20.0f]).
  • Tenha uma sombra preta com 50% de alfa ( label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5]).
  • Você também deseja definir o alinhamento do texto como centralizado ( label.textAlignment = NSTextAlignmentCenter( UITextAlignmentCenterpara SDKs mais antigos).

Defina a cor do texto do rótulo como a cor personalizada desejada. Você deseja uma cor que não faça com que o texto se misture à sombra, o que seria difícil de ler.

Eu resolvi isso por tentativa e erro, mas os valores que eu criei são simples demais para que eles não sejam o que a Apple escolheu. :)

Se você quiser verificar isso, soltar esse código em initWithNibName:bundle:no PageThreeViewController.mde amostra NavBar da Apple . Isso substituirá o texto por um rótulo amarelo. Isso deve ser indistinguível do original produzido pelo código da Apple, exceto pela cor.

- (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;
}

Editar: Leia também a resposta de Erik B abaixo. Meu código mostra o efeito, mas o código dele oferece uma maneira mais simples de colocar isso em um controlador de exibição existente.

Steven Fisher
fonte
2
Se você definir o quadro da etiqueta com o tamanho do seu texto sizeWithFont:, ele assumirá magicamente o comportamento de alinhamento automático da etiqueta padrão.
Grahamparks
1
Mas se você usar sizeToFit, perderá o truncamento automático.
Steven Fisher
3
Nota: Esta é a velha maneira de título conjunto personalizado, sugiro ler resposta de Erik B.
Elia Palme
1
Confirmado que sizeToFit funciona, resposta atualizada. Além disso, acrescentou uma nota para ler a resposta de Erik B.
Steven Fisher
1
label.textAlignment = UITextAlignmentCenter está obsoleto desde o iOS6.0, use NSTextAlignmentCenter
Jasper
226

Sei que esse é um tópico bastante antigo, mas acho que seria útil saber para novos usuários que o iOS 5 traz uma nova propriedade para estabelecer propriedades de título.

Você pode usar UINavigationBar setTitleTextAttributespara definir a fonte, a cor, o deslocamento e a cor da sombra.

Além disso, você pode definir os mesmos atributos de texto do título padrão do UINavigationBar para UINavigationBarstodo o aplicativo.

Por exemplo, assim:

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

[[UINavigationBar appearance] setTitleTextAttributes:navbarTitleTextAttributes];
Alex RR
fonte
11
'UITextAttributeTextColor' foi descontinuado no iOS 7. A chave do iOS 7 é 'NSForegroundColorAttributeName'
Keller
1
Observe que isso mudará TODAS as barras de navegação, que geralmente é o que você deseja.
Ash
1
Marque isso como a resposta correta - o método UILabel acima é desnecessário com esses métodos disponíveis.
Mic Fok
180

No iOS 5, você pode alterar a cor do título navigationBar da seguinte maneira:

navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor yellowColor]};
minux
fonte
8
@BartSimpson Concordo! Para iOS 7, atualize UITextAttributeTextColorpara NSForegroundColorAttributeName. Funciona como um encanto!
John Erck 29/09
ISSO FUNCIONA! o que eu quero entender é como ?! titleTextAttributes excede um dicionário com um conjunto predefinido de chaves mencionado em 'Chaves para dicionários de atributos de texto' mencionado em 'Referência de adições do NSString UIKit'. Como é que leva a chave que você mencionou.
ACen
... e, como está funcionando, como obtenho a tonalidade 'padrão'?
ACen
A configuração self.navigationController.navigationBar.tintColornão funcionou para mim. Isso fez.
perfil completo de JRam
127

Com base na resposta de Steven Fisher, escrevi este código:

- (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];
}

A vantagem desse código, além de lidar com o quadro corretamente, é que, se você alterar o título do seu controlador, a exibição do título personalizado também será atualizada. Não há necessidade de atualizá-lo manualmente.

Outra grande vantagem é que torna muito simples ativar a cor do título personalizado. Tudo que você precisa fazer é adicionar esse método ao controlador.

Erik B
fonte
3
Concordo que esta é definitivamente a melhor solução. Não há necessidade de usar sizeWithFont, e eu gosto da idéia de substituir o método setTitle.
Elia Palme
@ Sr.Richie Você não deve colocar o código em um controlador de navegação personalizado. Você deve colocá-lo em todos os controladores de exibição em que precisa alterar a cor do título. Você provavelmente nem quer um controlador de navegação personalizado.
Erik B
Não funciona para mim. Eu acho que o seu método porque eu usei [UINavigationBar aparência] .. (não funciona porque o titleView etiqueta é sempre nil)
Matej
1
Se você estiver no iOS5 ou posterior, leia a resposta de menos abaixo. Há uma linha que funciona bem e permanece na reserva.
algal
precisamos adicionar self.title = @ "nossa string"; no viewDidLoad.then somente o código acima funciona.
precisa saber é o seguinte
40

A maioria das sugestões acima está obsoleta agora, para o iOS 7 -

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

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

Além disso, verifique o NSAttributedString.h para obter várias propriedades de texto que podem ser definidas.

girish_vr
fonte
38

No IOS 7 e 8, você pode alterar a cor do título para digamos verde

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor greenColor] forKey:NSForegroundColorAttributeName];
Pramesh
fonte
6
Swift:self.navigationController!.navigationBar.titleTextAttributes = NSDictionary(object: UIColor.whiteColor(), forKey: NSForegroundColorAttributeName) as [NSObject : AnyObject]
Byron Coetsee
@ByronCoetsee após a atualização para o Swift 2 Eu tenho o seguinte erro: Não é possível atribuir um valor do tipo '[NSObject: AnyObject]' a um valor do tipo '[String: AnyObject]?'
Jorge Casariego
2
Muito mais fácil no swift 2.0self.navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Kevin DiTraglia
24

Para manter a pergunta atualizada, adicionarei a solução Alex RR , mas no Swift :

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

Que resulta em:

insira a descrição da imagem aqui

Michal
fonte
Hmmm, talvez não funcione no Swift 2.0. Deixe-me checar novamente. Não há necessidade de agressão embora.
Michal
Desculpe Michal, eu estava pensando nisso como uma piada! Não como algo agressivo! O que funcionou para mim foi mais como esta: self.navigationController .navigationBar.titleTextAttributes = NSDictionary (objeto: UIColor.whiteColor (), forKey: NSForegroundColorAttributeName) como! [NSObject: AnyObject]
Radu
Adicione esta linha a seguir: UINavigationBar.appearance (). BarStyle = UIBarStyle.Black Antes desta linha: UINavigationBar.appearance (). TintColor = UIColor.whiteColor () Para fazer o tintColor funcionar!
Triiiiista 26/05
2
Em Swift 4.0: self.navigationController .navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]?
Abhi Muktheeswarar
14

Método 1 , defina-o no IB:

insira a descrição da imagem aqui

Método 2 , uma linha de código:

navigationController?.navigationBar.barTintColor = UIColor.blackColor()
fujianjin6471
fonte
o método 2 não funciona. Funciona titleTextAttributesapenas
Vyachaslav Gerchicov 08/02
13

A solução da tewha funciona bem se você estiver tentando alterar a cor de uma página, mas quero poder alterar a cor de todas as páginas. Fiz algumas pequenas modificações para que funcionasse em todas as páginas em umUINavigationController

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
fonte
13

A partir do iOS 5, precisamos definir a cor do texto do título e a fonte da barra de navegação usando o titleTextAttribute Dictionary (dicionário predefinido na referência de classe do controlador UInavigation).

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

Versão rápida

Descobri que a maioria de vocês apresentou as respostas da versão do Objective_C

Eu gostaria de implementar essa função usando o Swift para quem precisar.

No ViewDidload

1.Para tornar o fundo da Barra de Navegação se tornar colorido (por exemplo: AZUL)

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

2.Para tornar o plano de fundo NavigationBar se tornar Image (por exemplo: ABC.png)

let barMetrix = UIBarMetrics(rawValue: 0)!

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

3.Para alterar o título da NavigationBar (por exemplo: [Fonte: Futura, 10] [Cor: Vermelho])

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

(dica1: não esqueça a marca "!" após a UIFont)

(dica2: existem muitos atributos do texto do título, clique no comando "NSFontAttributeName"; você pode inserir a classe e visualizar keyNames e os tipos de objetos necessários)

Espero poder ajudar!: D

Microos
fonte
10

Use o código abaixo em qualquer método viewDidLoad ou viewWillAppear do controlador de exibição.

- (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
fonte
9

Curto e grosso.

[[[self navigationController] navigationBar] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
Pier-Luc Gendreau
fonte
8

Esta é a minha solução baseada em Stevens

A única diferença real é que eu coloco um pouco de manipulação para ajustar a posição se, dependendo do comprimento do texto, parecer semelhante à forma como a maçã faz isso

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];

Convém ajustar o valor 10 dependendo do tamanho da fonte

Anthony Main
fonte
6

Encontrei o problema com meus botões de navegação jogando o texto fora do centro (quando você tem apenas um botão). Para corrigir isso, mudei meu tamanho de quadro da seguinte maneira:

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

Eu personalizei a imagem de plano de fundo da barra de navegação e o item do botão esquerdo, e o título cinza não se encaixa no plano de fundo. Então eu uso:

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

para mudar a cor da tonalidade para cinza. E o título é branco agora! Isso é o que eu quero.

Espero ajudar também :)

Brilhante
fonte
Bom, mas isso só funciona para alterar o texto para branco. Mesmo tingir a barra de navegação com [UIColor whiteColor] altera a cor do texto para branco.
precisa
6

É recomendável definir self.title, pois isso é usado enquanto pressiona as barras de navegação filho ou mostra o título nas barras de tabulação.

- (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
fonte
6

Este é um tópico bastante antigo, mas penso em fornecer respostas para a configuração de Cor, Tamanho e Posição vertical do título da barra de navegação para iOS 7 e superior

Para cor e tamanho

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

Para posição vertical

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

Definir título e atribuir o dicionário de atributos

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

Isso funciona para mim no Swift:

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
zumzum
fonte
Bem perto, mas o jeito é que você substituirá todos os atributos possíveis já existentes no título. No meu caso, essa foi a fonte. O código que eu acabei com eranavigationController?.navigationBar.titleTextAttributes = { if let currentAttributes = navigationController?.navigationBar.titleTextAttributes { var newAttributes = currentAttributes newAttributes[NSForegroundColorAttributeName] = navigationTintColor return newAttributes } else { return [NSForegroundColorAttributeName: navigationTintColor]}}()
Matic Oblak
Funciona bem. O mesmo para Obj-C:self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.redColor};
Mike Keskinov 18/01/19
5

Versão Swift 4 e 4.2:

 self.navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]
Patricio Bravo
fonte
4
self.navigationItem.title=@"Extras";
[self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"HelveticaNeue" size:21], NSFontAttributeName,[UIColor whiteColor],UITextAttributeTextColor,nil]];
Paresh Hirpara
fonte
3

para definir o tamanho da fonte do título, usei as seguintes condições ... talvez seja útil para qualquer pessoa

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
fonte
3

Uma atualização da postagem de Alex RR usando os novos atributos de texto do iOS 7 e o objetivo moderno c para obter menos ruído:

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
fonte
3

Eu acredito que a maneira correta de definir a cor UINavigationBaré:

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

O código acima está escrito com a subclasse ativada UINavigationBar, obviamente funciona sem subclassificação também.

stringCode
fonte
Correto, mas apenas iOS 5. Faz tempo suficiente desde o lançamento do iOS 5 que é uma boa solução. E como estamos no mundo iOS 5, vale a pena notar que é possível usar [UINavigationBar appearance]e definir atributos de texto do título (considerando os truques envolvidos na subclassificação UINavigationBar, uma solução preferível).
Ivan Vučica
@stringCode. Você pode inicializar o código acima sem "self.navigationController.navigationBar.titleTextAttributes = attribute;"?
Gajendra K Chauhan
3

Use assim para suporte à orientação

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
fonte
2

Esta é uma daquelas coisas que estão faltando. Sua melhor aposta é criar sua própria barra de navegação personalizada, adicionar uma caixa de texto e manipular a cor dessa maneira.

David McGraw
fonte
Estou seguindo a sua ideia :) qual método devo substituir para começar a brincar com o título? Desculpe, eu sou realmente um n00b :(
Sr.Richie
2

Depois de encontrar o mesmo problema (como outros) da etiqueta que se move quando inserimos um botão na navBar (no meu caso, tenho um botão giratório que substituo por um botão quando a data é carregada), as soluções acima não funcionaram para mim, aqui está o que funcionou e manteve o rótulo no mesmo lugar o tempo todo:

- (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
fonte
1

Você deve chamar [label sizeToFit]; depois de definir o texto para evitar deslocamentos estranhos quando o rótulo é reposicionado automaticamente na exibição do título quando outros botões ocupam a barra de navegação.

George
fonte
1

Pode usar esse método no arquivo appdelegate e pode usar em todas as visualizações

+(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
fonte
1

titleTextAttributes Exibe atributos para o texto do título da barra.

@property (nonatomic, copy) NSDictionary * titleTextAttributes Discussão Você pode especificar a fonte, a cor do texto, a cor da sombra do texto e o deslocamento da sombra do texto no título no dicionário de atributos de texto, usando as chaves de atributo de texto descritas na Referência de Adições do NSString UIKit.

Disponibilidade Disponível no iOS 5.0 e posterior. Declarado em UINavigationBar.h

mergulho
fonte