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 UILabel
como o titleView
do 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
( UITextAlignmentCenter
para 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.m
de 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.