color - navigation bar ios swift 4
iOS cambia la fuente y el color del título de la barra de navegación (13)
Así que tengo este código que debería cambiar la fuente del título de la barra de navegación, pero doenst
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
[UIColor whiteColor], NSForegroundColorAttributeName, nil];
[[UINavigationBar appearance] setTitleTextAttributes:attributes];
Cambiar la fuente del botón Atrás con este código funciona bien.
//set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
forState:UIControlStateNormal];
iOS 11
C objetivo
if (@available(iOS 11.0, *)) {
self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAlways;
self.navigationController.navigationBar.prefersLargeTitles = true;
// Change Color
self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
} else {
// Fallback on earlier versions
}
Aquí hay una respuesta para Swift 4 😁:
let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
navigationController?.navigationBar.titleTextAttributes = textAttributes
Aquí hay una respuesta para su pregunta:
Mueva su código al siguiente método porque el título de la barra de navegación se actualizó después de la vista cargada. Intenté agregar el código anterior en viewDidLoad no funciona, funciona bien en el método viewDidAppear.
-(void)viewDidAppear:(BOOL)animated{}
Cualquiera necesita una versión de Swift 3. redColor()
ha cambiado a solo red
.
self.navigationController?.navigationBar.titleTextAttributes =
[NSForegroundColorAttributeName: UIColor.red,
NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]
Es un poco más legible usando literales:
self.navigationController.navigationBar.titleTextAttributes = @{
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
NSForegroundColorAttributeName: [UIColor whiteColor]
};
Esta es una alternativa a Swift 4 (ya responde por @Josh):
let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed
La forma correcta de cambiar la fuente del título (y el color) es:
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];
Rápido:
self.navigationController?.navigationBar.titleTextAttributes =
[NSForegroundColorAttributeName: UIColor.redColor(),
NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]
Mi código Swift para cambiar el título de la barra de navegación:
let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes
Y si también quieres cambiar la fuente de fondo, tengo esto en mi AppDelegate:
let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)
No hay nada malo con las otras respuestas. Solo estoy compartiendo la versión del guión gráfico para configurar la fuente.
1. Seleccione su barra de navegación dentro de su controlador de navegación
2. Cambia la fuente del título en el inspector de atributos
(Es probable que necesite alternar el matiz de barra para la barra de navegación antes de que Xcode seleccione la nueva fuente)
Notas (Advertencias)
Verificado que esto funciona en Xcode 7.1.1+. ( Vea las muestras a continuación )
- Necesita alternar el matiz de la barra de navegación antes de que la fuente tenga efecto (parece un error en Xcode; puede volver a cambiarlo a la predeterminada y la fuente se pegará)
- Si elige una fuente del sistema ~ Asegúrese de que el tamaño no sea 0.0 (De lo contrario, se ignorará la nueva fuente)
- Parece que esto funciona sin problemas cuando solo hay una NavBar en la jerarquía de vistas. Parece que NavBars secundarios en la misma pila se ignoran. (Tenga en cuenta que si muestra la barra de navegación del controlador de navegación principal, se ignorarán todas las demás configuraciones de la barra de navegación personalizada).
Gotchas (deux)
Algunos de estos se repiten, lo que significa que es muy probable que valga la pena mencionarlos.
- En ocasiones, el storyboard xml se corrompe. Esto requiere que revises la estructura en Storyboard como modo Código fuente (haz clic con el botón derecho en el archivo del guión gráfico> Abrir como ...)
- En algunos casos, la etiqueta navigationItem asociada con el atributo de tiempo de ejecución definido por el usuario se estableció como un elemento secundario xml de la etiqueta de vista en lugar de la etiqueta del controlador de vista. Si es así, quítelo de entre las etiquetas para un funcionamiento correcto.
- Mueva el NavBar Tint para asegurarse de que se utiliza la fuente personalizada.
- Verifique el parámetro de tamaño de la fuente a menos que use un estilo de fuente dinámico
- La jerarquía de vista anulará la configuración. Parece que una fuente por pila es posible.
Resultado
Muestras
- Video que muestra varias fuentes en el proyecto avanzado
- Descarga simple de la fuente
- Descarga avanzada del proyecto ~ Muestra varias fuentes NavBar y solución personalizada
- Video que muestra varias fuentes y fuentes personalizadas
Manejo de fuentes personalizadas
Nota ~ Puede encontrar una buena lista de verificación en el sitio web Code With Chris y puede ver el proyecto de descarga de muestra.
Si tiene su propia fuente y desea usarla en su guión gráfico, entonces hay un conjunto de respuestas decente en la siguiente pregunta SO . Una respuesta identifica estos pasos.
- Obtenga su archivo de fuente personalizado (.ttf, .ttc)
- Importe los archivos de fuentes a su proyecto de Xcode
- En la aplicación-info.plist, agregue una clave llamada Fuentes proporcionada por la aplicación. Es un tipo de matriz, agregue todos los nombres de los archivos de fuentes a la matriz, nota: incluida la extensión del archivo.
- En el guión gráfico, en la barra de navegación, vaya al inspector de atributos, haga clic en el botón del icono derecho del área de selección de fuentes. En el panel emergente, seleccione Fuente a personalizada y elija la familia del nombre de fuente embebido.
Solución personalizada de la fuente
Así que Xcode naturalmente parece que puede manejar fuentes personalizadas en UINavigationItem, pero esa característica simplemente no se está actualizando correctamente (se ignora la fuente seleccionada).
Para solucionar esto esto:
Una forma es corregir el uso del guión gráfico y agregar una línea de código: primero agregue un UIView (UIButton, UILabel o alguna otra subclase de UIView) al controlador de visualización (no es el elemento de navegación ... Xcode actualmente no permite hacerlo). ese). Después de agregar el control, puede modificar la fuente en el guión gráfico y agregar una referencia como salida a su Controlador de Vista. Simplemente asigne esa vista al UINavigationItem.titleView. También puede establecer el nombre del texto en el código si es necesario. Error informado (23600285).
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
No olvide agregar los valores brutos de las claves para evitar errores de compilación.
let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
navigationController?.navigationBar.titleTextAttributes = textAttributes
Prueba esto:
NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor],NSForegroundColorAttributeName,
[UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
Trabajando en swift 3.0 Para cambiar el color del título necesitas agregar titleTextAttributes como este
let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
self.navigationController.navigationBar.titleTextAttributes = textAttributes
For changing navigationBar background color you can use this
self.navigationController.navigationBar.barTintColor = UIColor.white
For changing navigationBar back title and back arrow color you can use this
self.navigationController.navigationBar.tintColor = UIColor.white
Tuve un problema porque cuando traté de cambiar mi título de NavigationItem programáticamente no pude encontrar la fuente de mi familia (intenté muchas cosas pero era imposible hacer que funcionara correctamente), así que encontré una solución muy agradable y fácil en el guión gráfico.
- En primer lugar, agrega debajo del elemento de navegación una vista en el centro y no olvide establecer backGroundColor para borrar el color y tener el mismo color de navBar:
- Luego agrega una etiqueta que puede editar (establecer el color del texto, fuente, tamaño ...) en esta vista
- Usted agrega restricciones a la etiqueta (Superior = 0, Inferior = 0, Trailing = 0 y Leading = 0) para Ver y centrar el texto de la etiqueta
Finalmente, debe tener algo así en el esquema del documento:
Y algo así en tu ViewController:
Espero que pueda ayudar.