Barra de navegação, tonalidade e cor do texto do título no iOS 8

177

O texto em segundo plano na barra de status ainda está em preto. Como altero a cor para branco?

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

insira a descrição da imagem aqui

AG1
fonte

Respostas:

312

Em AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)coloquei o seguinte:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]

(Para Swift 4 ou anterior, em NSAttributedStringKeyvez de NSAttributedString.Key)

Pois titleTextAttributes, os documentos dizem:

Você pode especificar a fonte, a cor do texto, a cor da sombra do texto e o deslocamento da sombra do texto para o título no dicionário de atributos de texto

Albert Vila Calvo
fonte
6
e se tivermos várias barras de navegação?
sumit
6
O tintColor não funciona no Xcode 7.3.1. O texto ainda está em preto.
Triiiiista 26/05
1
No Xcode 8.2, o titleTextAttributes não é preenchido automaticamente, mas funciona.
Ok #
o barTintColor ainda é necessário? excluir essa linha ainda funciona
rgkobashi
122

Eu gosto da resposta de Alex. Se você quiser algo rápido para experimentar, ViewControllercertifique-se de usar

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // swift 4.2
}

insira a descrição da imagem aqui

AG1
fonte
Mas eu estou usando iso 8.1
Saorikido
1
por que viewWillAppear ()? Estou fazendo isso no viewDidLoad e funciona bem.
Adam Johns
4
Porque toda vez que você visualiza o UIView, deseja que ele seja definido. Se você definir viewDidLoad () em uma visualização UITabBar, vá para outra guia onde ela está configurada novamente e volte a ser substituída, pois a visualização original foi carregada apenas uma vez.
FractalDoctor
2
Atualização para o swift 4 - NSForegroundColorAttributeNameagora deve ser #NSAttributedStringKey.foregroundColor
Alan Scarpa
3
Atualização para o Swift 4.2: em NSAttributedString.Key.foregroundColorvez deNSForegroundColorAttributeName
Stephane Paquet
81

Para alterar a cor universalmente, este código deve sentar-se no NavigationController's viewDidLoadfunção:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

Para alterá-lo por ViewControllervocê teria que fazer referência a NavigationControllerpartir do ViewControllere escrever linhas semelhantes em que ViewController's viewWillAppearfunção.

Alex
fonte
Como substituir o NavigationController para usar esses métodos?
AG1
Você não substitui o NavigationController, apenas modifica-o na função ViewDidLoad. Eu atualizei minha resposta acima.
Alex
1
Então, um desenvolvedor só precisa adicionar NavigationController.swift à área de trabalho? Se sim, isso é legal!
AG1
5
@ AG1 Isso está incorreto, apenas a adição de um novo arquivo NavigationController.swift não é suficiente. Você precisa conectar o Navigation Controller no Storyboard a esse arquivo no Identity Inspector, pois, por padrão, ele usa um Generic UINavigationController.
kakubei
2
Você também pode fazer tudo isso no storyboard sem precisar criar um controlador de navegação personalizado. As propriedades de Bar Tine e Style estão à direita, no inspetor Attributes.
Markymark
31

Swift 5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

Swift 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Flor
fonte
2
Eu recebo: Tipo 'NSAttributedStringKey' (também conhecido como 'NSString') não tem nenhum membro 'foregroundColor'
Alfi
Use o código abaixo para a versão mais recente xcode 10 e swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam
16

Para trabalhar no objetivo-c , tenho que colocar as seguintes linhas viewWillAppearno meu CustomViewController.

[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTranslucent:NO];

Para Swift2.x, isso funciona:

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

Para Swift3.x, isso funciona:

self.navigationController?.navigationBar.barTintColor = UIColor.red
Niko Klausnitzer
fonte
Mas quando eu volto para outro controlador de exibição, a cor também mudou. Alguma idéia de como evitar isso. Quero que o meu principal controlador de exibição seja de uma cor e os outros de outra.
user3163404
1
Eu acho que você também precisa definir a cor no seu novo controlador de exibição.
Niko Klausnitzer 28/08/2015
13

Para fazer este trabalho no storyboard (Interface Builder Inspector)

Com a ajuda de IBDesignable, podemos adicionar mais opções ao Interface Builder Inspector UINavigationControllere ajustá-las no storyboard. Primeiro, adicione o seguinte código ao seu projeto.

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            navigationBar.barTintColor = newValue
        }
        get {
            guard  let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

Em seguida, basta definir os atributos para UINavigationController no storyboard.

insira a descrição da imagem aqui

Fangming
fonte
7

Se você deseja definir a cor da tonalidade e a cor da barra para todo o aplicativo, o código a seguir pode ser adicionado ao AppDelegate.swift em

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

A barra de navegaçãoTintColor e tintColor está definida

VirajP
fonte
6

Atualizado com o swift 4

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}
Raj Joshi
fonte
6

No Swift5 e no Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
fonte
Embora esse trecho de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
31
4

Versão Swift 4.2 da resposta de Albert

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]
Abhishek Jain
fonte
Gostei muito de como você adicionou esta resposta. .barTintColor não é uma opção agora. Você quer dizer .backgroundColor?
Ben
4

Configurando a cor do texto do título da barra de navegação para branco na versão Swift 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Rawand Saeed
fonte
3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}
Vladimir
fonte
3

Swift 4.1

Adicione uma função para viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

Na setup()função, adicione:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }
Patrick.Bellot
fonte
1

Para cores personalizadas em TitleTextat NavigationBar, aqui está um código simples e curto para o Swift 3:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

ou

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]
ifredy3
fonte
1

no Swift 4.2

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Imtee
fonte
1

Rápida no Swift 3.2 (não no Swift 4.0)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black
bubbaspike
fonte
0

No Swift 3, isso funciona:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
srinivasan
fonte
0

Swift 5.1

Apenas copie e cole ViewDidLoad()e altere o tamanho e o tamanho conforme sua necessidade. Antes de copiar e colar, adicione a barra de navegação na parte superior da tela.

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

Se não funcionar, você pode tentar alterar apenas a cor do texto

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Raksha.
fonte