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?

Brandon Evans
fuente

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

Etgar
fuente
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 =
Chamath Jeevan
fuente
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
93

Muy fácil de configurar en el guión gráfico:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

AlessandroDP
fuente
Perfecto, gracias :)
Naresh Reddy M
56

Deberías usar esto:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Tiep Vu Van
fuente
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
 }
Deepak Tagadiya
fuente
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
    }
Mohammad Nurdin
fuente
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)
AiOsN
fuente
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
Vincent
fuente
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
Darrell Richards
fuente
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

Elon R.
fuente
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.

Jamie McDaniel
fuente
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.

Suresh Kumar Durairaj
fuente
6

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

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

UINavigationBar.appearance().tintColor = .white

}
M. Nadeeshan
fuente
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
}
Mannam Brahmam
fuente
Muchas gracias, señor
Arpit B Parekh
4

en uso rápido 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Riccardo Caroli
fuente
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               
    }
}
Despotovic
fuente
3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Esto funciona para mí, iOS 9.0+

Yuchen
fuente
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()]
Jayprakash Dubey
fuente
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
}
yazh
fuente
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í

Miel
fuente
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()
Muhammad Ahmed Baig
fuente
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;
Ertaky
fuente
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
dengApro
0

Deberías agregar esta línea

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black
Monir Khlaf
fuente
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

Tylerlantern
fuente
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
Vaibhav Gaikwad
fuente