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.