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í

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


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í


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.


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

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

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í


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


6

Actualizado con swift 4

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

6

En Swift5 y Xcode 10

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes

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]

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]

3

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

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

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
    }

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]

1

en Swift 4.2

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

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

0

En Swift 3 esto funciona:

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

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]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.