Cambiar el color del botón Atrás en la barra de navegación


194

Estoy tratando de cambiar el color del botón Configuración a blanco, pero no puedo cambiarlo.

He intentado ambos:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

pero sin cambios, todavía se ve así:

ingrese la descripción de la imagen aquí

¿Cómo hago que ese botón sea blanco?

Respuestas:


284

Puede cambiar el color de tinte global en su guión gráfico haciendo clic en un espacio vacío en el tablero y seleccionando en la barra de herramientas derecha "Mostrar el inspector de archivos", y verá en la parte inferior de la barra de herramientas la opción "Tinte global".

Opción Global Tint en storyboard


77
woah .. Buen hallazgo !. ¿Sabes cómo hacer esto programáticamente?
Paul Lehn

10
Gran hallazgo, pero cambiar el tinte global a blanco (según la pregunta original) también cambiará cosas como los indicadores de divulgación de detalles de la vista de tabla a blanco, lo que los haría invisibles en la tabla en cuestión.
Mike Fischer

1
Agregando a los problemas de Mike: este control también hace que todos sus botones de texto sean de este color, por lo que deberá configurarlos a mano (es decir, obviamente no hay colores predeterminados) o simplemente usar un método diferente.
Sirenas

44
Si bien esta es una solución rápida y fácil, genera otros problemas si el color es blanco / coincide con el fondo. Si tiene campos de texto, hace que el cursor no se note, lo que hace que parezca que el usuario no puede escribir en un campo de texto porque el cursor no está visible.
José Ramírez

55
@PaulLehn Para hacer esto mediante programación, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)puede escribir:self.window!.tintColor = .yourColor
mmika1000

206

Este código cambia el color de la flecha.

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Si esto no funciona, use el siguiente código:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Swift 3 Notas

UIColor.whiteColor() y similares se han simplificado a UIColor.white

Además, muchas opciones opcionales previamente implícitas se han cambiado a explícitas, por lo que es posible que necesite:

self.navigationController?.navigationBar =

77
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()funcionó para mí (Swift 2.2)
Mike Fischer

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () funcionó para mí (Swift 3)
Ajay.km el

¿Puedes explicar por qué usar UIBarStyle.Black?
mmika1000

Actualice: self.navigationController? .NavigationBar.tintColor =
mohonish

1
solo cambia la flecha, el texto posterior sigue siendo el mismo en Xcode 11
jeff ayan


56

Deberías usar esto:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

Esto hizo que el botón fuera blanco, pero hizo que el color de fondo fuera mucho más claro. ¿Sabes cómo volver a darle color al fondo de la barra?
Brandon Evans

Esta es la respuesta correcta. Pondrá la barra de color púrpura, al establecer la barra de color de tinte y los botones de título / barra de color blanco.
zirinisp

36

Rápido

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
Uso en
Swift

también dime qué versión rápida puedes usar?
Deepak Tagadiya

¿Y qué clase / archivo / vc escribe este código en el proyecto?
Deepak Tagadiya

Al comienzo de la función setCloseButton () que se llama en viewWillAppear.
Jayprakash Dubey

escriba en el archivo NextViewController.swift, también escriba en viewDidLoad ().
Deepak Tagadiya

20

Puedes usar como este. Colóquelo adentro AppDelegate.swift.

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

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

Swift 4.2

Cambiar el tema completo de la aplicación

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Cambiar controlador específico

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

Cambia el color de toda la aplicación. ¿Qué sucede si necesito cambiarlo para una pantalla en particular / particular UINavigationController?
Vyachaslav Gerchicov

La respuesta anterior de @VyachaslavGerchicov es para el tema completo de la aplicación, si desea cambiar un controlador específico. Haga algo como esto: deje que navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
AiOsN

Si está en iOS 13 ya no usa didFinishLaunchingWithOptions, se movió a SceneDelegate.
JBarros35

15

En Swift3 , para configurar el botón Atrás en red.

self.navigationController?.navigationBar.tintColor = UIColor.red

esto establecerá la barra de navegación, no el elemento del botón de la barra
carlodonz

1
Sí, esa era la pregunta.
Vincent

"Cambiar el color del botón Atrás en la barra de navegación"
carlodonz

Este fue el único método que funcionó para mí. Algo parece roto con la implementación de Apple en este momento ...
Dave Y

13

En Swift 4, puede solucionar este problema utilizando:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

Swift 3

La respuesta más votada no es correcta para Swift 3.

ingrese la descripción de la imagen aquí

El código correcto para cambiar de color es:

self.navigationController?.navigationBar.tintColor = UIColor.white

Si desea cambiar el color, cambie UIColor.white arriba al color deseado


Este fue el único método que funcionó para mí. Algo parece roto con la implementación de Apple en este momento ...
Dave Y

7

Todas las respuestas están en UINavigationBar.appearance().tintColorconflicto con la documentación de Apple en UIAppearance.h.

Nota para iOS7: en iOS7, la tintColorpropiedad se ha movido a UIView, y ahora tiene un comportamiento heredado especial descrito en UIView.h. Este comportamiento heredado puede entrar en conflicto con el proxy de apariencia y, por tintColorlo tanto, ahora no está permitido con el proxy de apariencia.

En Xcode, debe hacer clic en cada propiedad que desea usar con el proxy de apariencia para inspeccionar el archivo de encabezado y asegurarse de que la propiedad esté anotada UI_APPEARANCE_SELECTOR.

Entonces, la forma correcta de colorear la barra de navegación de color púrpura y el título y los botones de color blanco en toda la aplicación a través del proxy de apariencia es:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

Tenga en cuenta que UIBarButtonItemno es una subclase de, UIViewsino más bien NSObject. Entonces su tintColorpropiedad no es la heredada tintColorde UIView.

Desafortunadamente, UIBarButtonItem.tintColorno está anotado con UI_APPEARANCE_SELECTOR, pero eso me parece un error de documentación. La respuesta de Apple Engineering en este radar indica que es compatible.


UINavigationBar.appearance (). LargeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // también
Guilherme

6
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Este fragmento hace la magia. En lugar del redColor, cámbielo como desee.


6

Use este código en AppDelegateclase, dentro de didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

Probemos este código:

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

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

Muchas gracias, señor
Arpit B Parekh

4

en uso rápido 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();

4

Si ya tiene el botón de retroceso en su controlador de vista "Configuración" y desea cambiar el color del botón de retroceso en el controlador de vista "Información de pago" a otra cosa, puede hacerlo dentro del controlador de vista "Configuración" para prepararse de esta manera. :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Esto funciona para mí, iOS 9.0+


2

Agregue el siguiente código a la función didFinishLaunchingWithOptions en AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

Este código me da el siguiente error: "Uso del identificador no resuelto 'uicolorFromHex'" ¿Alguien puede ayudarme a resolver eso?
jonathan3087

probablemente una extensión para UIColor. Puede buscar en stackoverflow cómo crear una extensión.
KvdLingen

2

Para Swift 2.0, para cambiar el color de tinte de la barra de navegación , el texto del título y el color de tinte del botón Atrás cambiaron utilizando lo siguiente en AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

No estoy seguro de por qué nadie ha mencionado esto ... pero estaba haciendo exactamente lo que estabas haciendo en mi viewDidLoad... y no estaba funcionando. Luego puse mi código viewWillAppeary todo funcionó.

La solución anterior es cambiar un solo elemento barbuttonItem. Si desea cambiar el color de cada barra de navegación en su código, siga esta respuesta .

Básicamente, cambiar a la clase en sí usando appearance()es como hacer un cambio global en todas las instancias de esa vista en su aplicación. Para más información ver aquí


1

Tiene una opción: ocultar su botón de retroceso y hacerlo con usted mismo. Luego establece su color.

Yo lo hice:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
La pregunta fue específicamente sobre el estilo del elemento de navegación izquierdo y esto es lo más cercano a responder la pregunta directamente.
artesanía

0

Se resolverá con esta línea en - (vacío) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro

0

Deberías agregar esta línea

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

Prefiero el NavigationController personalizado en lugar de configurar la interfaz de usuario global, o ponerlo en ViewController.

Aqui esta mi solucion


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

Además, no necesita meterse con Apple Api como EKEventEditViewController , PickerViewController , etc. , si usa la configuración global ui comoUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
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.