iOS 11

54

Não há nada de errado com as outras respostas. Estou apenas compartilhando a versão do storyboard para definir a fonte.

1. Selecione sua barra de navegação no seu controlador de navegação

navbar

2. Altere a fonte do título no Inspetor de atributos

fonte do título

(Você provavelmente precisará alternar a tonalidade da barra para a barra de navegação antes que o Xcode escolha a nova fonte)

Notas (advertências)

Verificado que isso funciona no Xcode 7.1.1+. ( Veja os exemplos abaixo )

  1. Você precisa alternar a tonalidade da barra de navegação antes que a fonte entre em vigor (parece um bug no Xcode; você pode voltar ao padrão e a fonte manterá)
  2. Se você escolher uma fonte do sistema ~ Certifique-se de que o tamanho não seja 0,0 (caso contrário, a nova fonte será ignorada)

Tamanho

  1. Parece que isso funciona sem problemas quando apenas uma NavBar está na hierarquia de visualização. Parece que NavBars secundárias na mesma pilha são ignoradas. (Observe que se você mostrar a navBar do controlador de navegação mestre, todas as outras configurações personalizadas da navBar serão ignoradas).

Gotchas (deux)

Alguns deles são repetidos, o que significa que muito provavelmente vale a pena notar.

  1. Às vezes, o xml do storyboard fica corrompido. Isso requer que você reveja a estrutura no Storyboard como modo de Código-fonte (clique com o botão direito do mouse no arquivo do storyboard> Abrir como ...)
  2. Em alguns casos, a tag navigationItem associada ao atributo runtime definido pelo usuário foi definida como um filho xml da tag view em vez da tag do controlador da view. Se assim for, remova-o de entre as tags para uma operação adequada.
  3. Alterne a tonalidade da NavBar para garantir que a fonte personalizada seja usada.
  4. Verifique o parâmetro de tamanho da fonte, a menos que use um estilo de fonte dinâmico
  5. A hierarquia de visualização substituirá as configurações. Parece que uma fonte por pilha é possível.

Resultado

navbar-italic

Amostras

Tratamento de fontes personalizadas

Observação ~ Uma boa lista de verificação pode ser encontrada no site Code With Chris e você pode ver o exemplo de projeto de download.

Se você tem sua própria fonte e deseja usá-la em seu storyboard, há um conjunto decente de respostas na seguinte pergunta do SO . Uma resposta identifica essas etapas.

  1. Obtenha seu arquivo de fonte personalizada (.ttf, .ttc)
  2. Importe os arquivos de fonte para o seu projeto Xcode
  3. No app-info.plist, adicione uma chave chamada Fonts fornecida pelo aplicativo. É um tipo de array, adicione todos os seus nomes de arquivo de fonte ao array, nota: incluindo a extensão do arquivo.
  4. No storyboard, na NavigationBar vá para o Attribute Inspector, clique com o botão direito do ícone da área de seleção de fonte. No painel pop-up, escolha Font to Custom e escolha o nome da família da fonte incorporada.

Solução alternativa de fonte personalizada

Portanto, o Xcode naturalmente parece que pode lidar com fontes personalizadas no UINavigationItem, mas esse recurso não está sendo atualizado corretamente (a fonte selecionada é ignorada).

UINavigationItem

Para contornar isso:

Uma maneira é corrigir o uso do storyboard e adicionar uma linha de código: Primeiro adicione um UIView (UIButton, UILabel ou alguma outra subclasse UIView) ao Controlador de Visualização (Não ao Item de Navegação ... O Xcode não está permitindo atualmente aquele). Depois de adicionar o controle, você pode modificar a fonte no storyboard e adicionar uma referência como uma saída para o seu View Controller. Basta atribuir essa visualização ao UINavigationItem.titleView. Você também pode definir o nome do texto no código, se necessário. Bug relatado (23600285).

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView
Tommie C.
fonte

Respostas:

21

Experimente isto:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
Akki
fonte
14

Meu código Swift para alterar o título da barra de navegação:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

E se você quiser alterar a fonte do plano de fundo também, eu tenho isso em meu AppDelegate:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)
Libor Zapletal
fonte
8

ADICIONE este código de linha única em seu App Delegate - Did Finish Lauch. Isso mudará a fonte, a cor da barra de navegação em todo o aplicativo.

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]
Renish Dadhaniya
fonte
5

Aqui está uma resposta para sua pergunta:

Mova seu código para o método abaixo porque o título da barra de navegação foi atualizado após o carregamento da visualização. Eu tentei adicionar o código acima em viewDidLoad não funciona, funciona bem no método viewDidAppear.

  -(void)viewDidAppear:(BOOL)animated{}
Praveen Hiremath
fonte
3

Qualquer pessoa precisa de uma versão Swift 3. redColor()mudou para apenas red.

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]
Karl Taylor
fonte
2

É um pouco mais legível usando literais:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };
sPoz
fonte
2

Tive um problema porque, quando tentei alterar o título do meu NavigationItem de forma programática, não consegui encontrar a fonte da minha família (tentei muitas coisas, mas era impossível fazê-la funcionar corretamente), então encontrei uma solução alternativa muito boa e fácil no storyboard.

  1. Em primeiro lugar, você adiciona no Item de navegação uma visualização no meio e não se esqueça de definir backGroundColor como cor clara para ter a mesma cor da barra de navegação:

insira a descrição da imagem aqui

  1. Em seguida, você adiciona um rótulo que você pode editar (definir a cor do texto, fonte, tamanho ...) nesta visualização
  2. Você adiciona restrições ao rótulo (Superior = 0, Inferior = 0, Trailing = 0 e Leading = 0) para visualizar e centralizar o texto do rótulo

Finalmente, você deve ter algo assim no esboço do documento:

insira a descrição da imagem aqui

E algo parecido em seu ViewController:

insira a descrição da imagem aqui

Espero que possa ajudar.

O. Boujaouane
fonte
2

Rápido:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]
Karthik
fonte
1

Este para alternativa ao Swift 4 (já respondido por @Josh):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed
Hendra Kusumah
fonte
1

iOS 11

insira a descrição da imagem aqui

Objective-C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}
Vivek
fonte
1

Para Objective-C definir fonte e cor

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}
Hardik Thakkar
fonte
0

Aqui está uma resposta para o Swift 4 😁:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes
Josh
fonte
0

Não se esqueça de adicionar os valores brutos das chaves para evitar erros de compilação.

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes
James Rochabrun
fonte
0

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]
ilkayaktas
fonte
0

Adicionar esta extensão

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

Adicione a seguinte linha em viewDidLoad ()

self.navigationController?.navigationBar.changeFont()
Pranit
fonte
-1

Working in swift 3.0 Para mudar a cor do título você precisa adicionar titleTextAttributes como este

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white
vikram
fonte