Barra de navegación, tinte y color del texto del título en iOS 8

177

El texto de fondo en la barra de estado sigue siendo negro. ¿Cómo cambio el color a blanco?

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

}

ingrese la descripción de la imagen aquí

AG1
fuente

Respuestas:

312

En AppDelegate.swift, application(_:didFinishLaunchingWithOptions:)pongo lo siguiente:

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 o uso anterior en NSAttributedStringKeylugar de NSAttributedString.Key)

Para titleTextAttributes, los documentos dicen:

Puede especificar la fuente, el color del texto, el color de la sombra del texto y el desplazamiento de la sombra del texto para el título en el diccionario de atributos de texto

Albert Vila Calvo
fuente
66
¿Qué pasa si tenemos varias barras de navegación?
sumitir
66
tintColor no funciona para Xcode 7.3.1. El texto sigue siendo negro.
triiiiista
1
En Xcode 8.2, titleTextAttributes no se completa automáticamente, pero funciona.
okysabeni
¿sigue siendo necesario barTintColor? borrar esa línea aún funciona
rgkobashi
122

Me gusta la respuesta de Alex. Si quieres probar algo rápido, ViewControllerasegúrate 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
}

ingrese la descripción de la imagen aquí

AG1
fuente
Pero estoy usando iso 8.1
Saorikido
1
¿Por qué viewWillAppear ()? Estoy haciendo esto en viewDidLoad y funciona bien.
Adam Johns
44
Porque cada vez que ves la UIView te gustaría que se configurara. Si configura en viewDidLoad (), digamos en una vista UITabBar, vaya a otra pestaña donde está configurada nuevamente, luego regrese, se sobrescribirá ya que la vista original solo se cargó una vez.
FractalDoctor
2
Actualización para swift 4 - NSForegroundColorAttributeNameahora debería serNSAttributedStringKey.foregroundColor
Alan Scarpa
3
Actualización para Swift 4.2: en NSAttributedString.Key.foregroundColorlugar deNSForegroundColorAttributeName
Stephane Paquet el
81

Para cambiar el color universal, este código debe sentarse en el NavigationController's viewDidLoadfunción:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Para cambiarla por ViewControllerque tendría que hacer referencia a la NavigationControllerdel ViewControllery escribir líneas similares en que ViewController's viewWillAppearfunción.

Alex
fuente
¿Cómo anulo el NavigationController para usar estos métodos?
AG1
No anula el NavigationController, simplemente lo modifica en la función ViewDidLoad. Actualicé mi respuesta anterior.
Alex
1
Entonces, ¿un desarrollador solo tiene que agregar NavigationController.swift al espacio de trabajo? Si es así, ¡eso está bien!
AG1
55
@ AG1 Esto es incorrecto, solo agregar un nuevo archivo NavigationController.swift no es suficiente, debe conectar su Controlador de Navegación en el Guión Gráfico a este archivo en el Inspector de Identidad ya que de manera predeterminada usará un Controlador UINavigation Genérico.
kakubei
2
También puede hacer todo esto en el guión gráfico sin necesidad de crear un controlador de navegación personalizado. Las propiedades para Bar Tine y Style están justo a la derecha debajo del inspector de atributos.
Markymark
31

Swift 5

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

Swift 4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
Flor
fuente
2
Obtengo: El tipo 'NSAttributedStringKey' (también conocido como 'NSString') no tiene ningún miembro 'foregroundColor'
Alfi
Utilice el siguiente código para la última versión xcode 10 y swift 4.2 self.navigationController? .NavigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Bhavsang Jam
16

Para trabajar en Objective -C , tengo que poner las siguientes líneas viewWillAppearen mi CustomViewController.

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

Para Swift2.x esto funciona:

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

Para Swift3.x esto funciona:

self.navigationController?.navigationBar.barTintColor = UIColor.red
Niko Klausnitzer
fuente
Pero cuando vuelvo a otro controlador de vista, el color también ha cambiado. Alguna idea sobre cómo prevenir esto. Quiero que mi controlador de vista principal sea de un color y los otros de otro.
user3163404
1
Creo que también debe configurar el color en su nuevo controlador de vista.
Niko Klausnitzer
13

Para hacer este trabajo en storyboard (Inspector del generador de interfaces)

Con la ayuda de IBDesignable, podemos agregar más opciones a Interface Builder Inspector UINavigationControllery ajustarlas en el guión gráfico. Primero, agregue el siguiente código a su proyecto.

@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
        }
    }
}

Luego, simplemente configure los atributos para UINavigationController en el guión gráfico.

ingrese la descripción de la imagen aquí

Colmillo
fuente
7

Si desea establecer el color de tinte y el color de la barra para toda la aplicación, puede agregar el siguiente código a AppDelegate.swift en

 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
`

Barra de navegación TintColor y tintColor está configurada

VirajP
fuente
6

Actualizado con swift 4

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

En Swift5 y Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes
iOS
fuente
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
31piy
4

Swift 4.2 versión de la respuesta 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
fuente
Realmente me gustó cómo agregaste esta respuesta. .barTintColor no es una opción ahora. ¿Te refieres a .backgroundColor?
Ben
4

Establecer el color del texto del título de la barra de navegación en blanco en Swift versión 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
Rawand Saeed
fuente
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
fuente
3

Swift 4.1

Agregue un func para verDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

En la setup()función agregar:

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
fuente
1

Para un color personalizado en TitleTextat NavigationBar, aquí hay un código simple y corto para Swift 3:

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

o

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

en Swift 4.2

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

Swift hacia arriba a través de Swift 3.2 (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
fuente
0

En Swift 3 esto funciona:

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

Swift 5.1

Solo copie y pegue ViewDidLoad()y cambie su tamaño y tamaño según lo necesite. Antes de copiar y pegar, agregue la barra de navegación en la parte superior de la pantalla.

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

Si no funciona, puede intentar cambiar solo el color del texto.

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