ios - bar - uinavigationitem title color
Cambiar el color de la barra de navegaciĆ³n en Swift (21)
Swift 3
UINavigationBar.appearance().barTintColor = UIColor(colorLiteralRed: 51/255, green: 90/255, blue: 149/255, alpha: 1)
Esto configurará el color de la barra de navegación como el color de la barra de Facebook :)
Estoy utilizando una vista de selector para permitir al usuario elegir el tema de color para toda la aplicación. Estoy planeando cambiar el color de la barra de navegación, el fondo y posiblemente la barra de pestañas (si es posible). He estado investigando cómo hacer esto pero no puedo encontrar ningún ejemplo de Swift. ¿Podría alguien darme un ejemplo del código que necesitaría usar para cambiar el color de la barra de navegación y el color del texto de la barra de navegación? (La vista del selector está configurada, solo estoy buscando el código para cambiar los colores de la interfaz de usuario)
Gracias.
Aquí hay algunas personalizaciones de aspecto muy básicas que puede aplicar a toda la aplicación:
UINavigationBar.appearance().backgroundColor = UIColor.greenColor()
UIBarButtonItem.appearance().tintColor = UIColor.magentaColor()
//Since iOS 7.0 UITextAttributeTextColor was replaced by NSForegroundColorAttributeName
UINavigationBar.appearance().titleTextAttributes = [UITextAttributeTextColor: UIColor.blueColor()]
UITabBar.appearance().backgroundColor = UIColor.yellowColor();
UIAppearance
más información UIAppearance
API UIAppearance
en Swift aquí: https://developer.apple.com/documentation/uikit/uiappearance
Barra de navegación:
navigationController?.navigationBar.barTintColor = UIColor.green
Reemplace greenColor con cualquier UIColor que desee, también puede usar un RGB si lo prefiere.
Texto de la barra de navegación:
navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Reemplace orangeColor con el color que desee.
Barra de pestañas:
tabBarController?.tabBar.barTintColor = UIColor.brown
Texto de la barra de pestañas
tabBarController?.tabBar.tintColor = UIColor.yellow
En los dos últimos, reemplace brownColor y yellowColor con el color de su elección.
Dentro de AppDelegate , esto ha cambiado globalmente el formato de NavBar y elimina la línea inferior / borde (que es un área problemática para la mayoría de las personas) para darle lo que creo que usted y otros están buscando:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default)
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barTintColor = Style.SELECTED_COLOR
UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().clipsToBounds = false
UINavigationBar.appearance().backgroundColor = Style.SELECTED_COLOR
UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] }
Luego puede configurar un archivo Constants.swift , y contiene una estructura de estilo con colores y fuentes, etc. Luego, puede agregar tableView / pickerView a cualquier ViewController y usar la matriz "availableThemes" para permitir al usuario cambiar themeColor.
Lo mejor de esto es que puedes usar una referencia en toda tu aplicación para cada color y se actualizará en función del "Tema" seleccionado del usuario y sin una, el tema por defecto es theme1 ():
import Foundation
import UIKit
struct Style {
static let availableThemes = ["Theme 1","Theme 2","Theme 3"]
static func loadTheme(){
let defaults = NSUserDefaults.standardUserDefaults()
if let name = defaults.stringForKey("Theme"){
// Select the Theme
if name == availableThemes[0] { theme1() }
if name == availableThemes[1] { theme2() }
if name == availableThemes[2] { theme3() }
}else{
defaults.setObject(availableThemes[0], forKey: "Theme")
theme1()
}
}
// Colors specific to theme - can include multiple colours here for each one
static func theme1(){
static var SELECTED_COLOR = UIColor(red:70/255, green: 38/255, blue: 92/255, alpha: 1) }
static func theme2(){
static var SELECTED_COLOR = UIColor(red:255/255, green: 255/255, blue: 255/255, alpha: 1) }
static func theme3(){
static var SELECTED_COLOR = UIColor(red:90/255, green: 50/255, blue: 120/255, alpha: 1) } ...
En Swift 4
Puedes cambiar el color de la barra de navegación. Solo use este fragmento de código a continuación en viewDidLoad()
Color de barra de navegación
self.navigationController?.navigationBar.barTintColor = UIColor.white
Color del texto de la barra de navegación
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]
Para la barra de navegación de título grande de iOS 11 , debe usar la propiedad largeTitleTextAttributes
self.navigationController?.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.purple]
En Swift 2
Para cambiar el color en la barra de navegación,
navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
Para cambiar el color en la barra de navegación del elemento,
navigationController?.navigationBar.tintColor = UIColor.blueColor()
o
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]
La función de apariencia () no siempre funciona para mí. Por lo tanto, prefiero crear un objeto NC y cambiar sus atributos.
var navBarColor = navigationController!.navigationBar
navBarColor.barTintColor = UIColor(red: 255/255.0, green: 0/255.0, blue: 0/255.0, alpha: 100.0/100.0)
navBarColor.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]
Además, si desea agregar una imagen en lugar de solo texto, eso también funciona
var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 70, height: 70))
imageView.contentMode = .ScaleAspectFit
var image = UIImage(named: "logo")
imageView.image = image
navigationItem.titleView = imageView
Primero establezca la propiedad isTranslucent de navigationBar en false para obtener el color deseado. A continuación, cambie el color de la barra de navegación de esta manera:
@IBOutlet var NavigationBar: UINavigationBar!
NavigationBar.isTranslucent = false
NavigationBar.barTintColor = UIColor (red: 117/255, green: 23/255, blue: 49/255, alpha: 1.0)
Si se está moviendo desde un controlador de navegación y tiene que establecer un color diferente en el controlador de navegación que presionó desde que desea usar
override func willMove(toParentViewController parent: UIViewController?) {
navigationController?.navigationBar.barTintColor = .white
navigationController?.navigationBar.tintColor = Constants.AppColor
}
en lugar de ponerlo en la vista, aparecerá para que la transición sea más clara.
Si tiene un controlador de navegación personalizado, puede usar el fragmento de código anterior. Entonces, en mi caso, he usado los siguientes fragmentos de código.
Swift 3.0, versión de XCode 8.1
navigationController.navigationBar.barTintColor = UIColor.green
Texto de la barra de navegación:
navigationController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
Son conversaciones muy útiles.
Tenía que hacer
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().barStyle = .Black
UINavigationBar.appearance().backgroundColor = UIColor.blueColor()
de lo contrario, el color de fondo no cambiaría
Use la apariencia API y el color barTintColor.
UINavigationBar.appearance().barTintColor = UIColor.greenColor()
Actualizado para Swift 3
// setup navBar.....
UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
Swift 4
UINavigationBar.appearance().barTintColor = .black
UINavigationBar.appearance().tintColor = .white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UINavigationBar.appearance().isTranslucent = false
Para hacer esto en el guión gráfico (Interface Builder Inspector)
Con la ayuda de IBDesignable
, podemos agregar más opciones al Inspector de Interface Builder para UINavigationController
y modificarlas en el guión gráfico. Primero, agregue el siguiente código a su proyecto.
@IBDesignable extension UINavigationController {
@IBInspectable var barTintColor: UIColor? {
set {
guard let uiColor = newValue else { return }
navigationBar.barTintColor = uiColor
}
get {
guard let color = navigationBar.barTintColor else { return nil }
return color
}
}
}
Luego, simplemente configure los atributos para el controlador de navegación en el guión gráfico.
Swift 3 y Swift 4 Compatible Xcode 9
Una mejor solución para hacer una clase para barras de navegación comunes
Tengo 5 controladores y cada título de controlador se cambia a color naranja. Como cada controlador tiene 5 controles de navegación, tuve que cambiar cada color desde el inspector o desde el código.
Así que hice una clase en lugar de cambiar todas las barras de navegación del código, solo asigno esta clase y funcionó en las 5 habilidades de reutilización de códigos del controlador. Solo tienes que asignar esta clase a Cada controlador y eso es todo.
import UIKit
class NabigationBar: UINavigationBar {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonFeatures()
}
func commonFeatures() {
self.backgroundColor = UIColor.white;
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor:ColorConstants.orangeTextColor]
}
}
Swift 3
Un simple trazador de líneas que puedes usar en ViewDidLoad()
//Change Color
self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Swift 4 actualización
Solo ponga una línea dentro de viewDidLoad()
navigationController?.navigationBar.barTintColor = UIColor.red
iOS 10 Swift 3.0
Si no le importa usar marcos rápidos, entonces UINeraida para cambiar el fondo de navegación como UIColor
o HexColor
o UIImage
y cambiar el texto del botón de retroceso de navegación mediante programación, cambie el color del texto forground completo.
Para UINavigationBar
neraida.navigation.background.color.hexColor("54ad00", isTranslucent: false, viewController: self)
//Change navigation title, backbutton colour
neraida.navigation.foreground.color.uiColor(UIColor.white, viewController: self)
//Change navigation back button title programmatically
neraida.navigation.foreground.backButtonTitle("Custom Title", ViewController: self)
//Apply Background Image to the UINavigationBar
neraida.navigation.background.image("background", edge: (0,0,0,0), barMetrics: .default, isTranslucent: false, viewController: self)
iOS 8 (veloz)
let font: UIFont = UIFont(name: "fontName", size: 17)
let color = UIColor.backColor()
self.navigationController?.navigationBar.topItem?.backBarButtonItem?.setTitleTextAttributes([NSFontAttributeName: font,NSForegroundColorAttributeName: color], forState: .Normal)
UINavigationBar.appearance().barTintColor = UIColor(red: 46.0/255.0, green: 14.0/255.0, blue: 74.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.whiteColor()]
Simplemente pegue esta línea en didFinishLaunchingWithOptions
en su código.
UINavigationBar.appearance().barTintColor
trabajó para mi