iOS cambia la fuente y el color del título de la barra de navegación


101

Así que tengo este código que debería cambiar la fuente del título de la barra de navegación, pero no

    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];

Respuestas:


251

La forma correcta de cambiar la fuente (y el color) del título es:

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

Editar: Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Editar: Swift 4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Swift 3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]

2
El tamaño sigue siendo el mismo independientemente del valor que pruebe
Raphael Royer-Rivard

1
Sí, me di cuenta de que mi fuente no estaba cargada correctamente. Aún no puedo entender por qué, importé OpenSans-Light y OpenSans-Regular de la misma manera, solo OpenSans-Light parece ser utilizable ...
Raphael Royer-Rivard

1
Al código Obj-C le falta un corchete de cierre. Debe ser: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" tamaño: 21]}];
Dylan Hand

vaya al enlace para cambiar la fuente backBarButton: stackoverflow.com/a/16538596/5967144
soorej babu

¿Qué pasa cuando se usa una barra de navegación LargeTitle? No encuentro nada navigationBar.LargeTitleTextAttributesni nada al respecto. ¿Sabe cómo configurar la fuente LargeTitle globalmente?
iKK

54

No hay nada de malo en 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

barra de navegación

2. Cambiar la fuente del título en el inspector de atributos

fuente del titulo

(Es probable que deba alternar el Tinte de barra de la barra de navegación antes de que Xcode elija la nueva fuente)

Notas (advertencias)

Verificado que esto funciona en Xcode 7.1.1+. ( Vea las muestras a continuación )

  1. Necesita alternar el tinte de la barra de navegación antes de que la fuente surta efecto (parece un error en Xcode; puede volver a cambiarlo al valor predeterminado y la fuente se mantendrá)
  2. Si elige una fuente del sistema ~ Asegúrese de asegurarse de que el tamaño no sea 0.0 (de lo contrario, se ignorará la nueva fuente)

Talla

  1. Parece que esto funciona sin problemas cuando solo hay una barra de navegación en la jerarquía de vistas. Parece que las NavBars secundarias de la misma pila se ignoran. (Tenga en cuenta que si muestra la barra de navegación del controlador de navegación maestro, se ignoran todas las demás configuraciones personalizadas de la barra de navegación).

Gotchas (deux)

Algunos de estos se repiten, lo que significa que es muy probable que valga la pena mencionarlos.

  1. A veces, el xml del guión gráfico se corrompe. Esto requiere que revise la estructura en Storyboard como modo de código fuente (haga clic con el botón derecho en el archivo de storyboard> Abrir como ...)
  2. En algunos casos, la etiqueta navigationItem asociada con el atributo de tiempo de ejecución definido por el usuario se estableció como un hijo 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 que funcione correctamente.
  3. Alterne el Tinte NavBar para asegurarse de que se utiliza la fuente personalizada.
  4. Verifique el parámetro de tamaño de la fuente a menos que utilice un estilo de fuente dinámico
  5. La jerarquía de vistas anulará la configuración. Parece que es posible una fuente por pila.

Resultado

navbar-italic

Muestras

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 decente de respuestas en la siguiente pregunta SO . Una respuesta identifica estos pasos.

  1. Obtenga su archivo de fuente personalizado (.ttf, .ttc)
  2. Importe los archivos de fuentes a su proyecto Xcode
  3. En app-info.plist, agregue una clave llamada Fuentes proporcionada por la aplicación. Es un tipo de matriz, agregue todos los nombres de archivo de fuente a la matriz, nota: incluida la extensión del archivo.
  4. 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 fuente En el panel emergente, elija Fuente a personalizada y elija el nombre de la fuente incrustada Familia de usted.

Solución alternativa de fuentes personalizadas

Entonces, Xcode, naturalmente, parece que puede manejar fuentes personalizadas en UINavigationItem, pero esa función simplemente no se actualiza correctamente (la fuente seleccionada se ignora).

UINavigationItem

Para solucionar esto:

Una forma es arreglar usando el 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 vista (no al elemento de navegación ... Xcode actualmente no permite que uno haga 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 a 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

21

Prueba esto:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

14

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 desea 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)

8

AÑADA este código de una sola línea en su App Delegate - Did Finish Lauch. Cambiará la fuente, el color de la barra de navegación en toda la aplicación.

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

5

Aquí hay una respuesta a su pregunta:

Mueva su código al método siguiente porque el título de la barra de navegación se actualizó después de cargar la vista. Intenté agregar el código anterior en viewDidLoad no funciona, funciona bien en el método viewDidAppear.

  -(void)viewDidAppear:(BOOL)animated{}

3

Cualquiera necesita una versión Swift 3. redColor()ha cambiado a solo red.

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

2

Es un poco más legible usando literales:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };

2

Tuve un problema porque cuando intenté cambiar el título de NavigationItem programáticamente, no pude encontrar la fuente de mi familia (intenté muchas cosas, pero fue imposible que se ejecutara correctamente), así que encontré una solución muy agradable y fácil en el guión gráfico.

  1. En primer lugar, agrega una vista en el medio del elemento de navegación y no se olvide de configurar backGroundColor en color claro para tener el mismo color de navBar:

ingrese la descripción de la imagen aquí

  1. Luego agrega una etiqueta que puede editar (establecer el color del texto, la fuente, el tamaño ...) en esta vista
  2. Agrega restricciones a la etiqueta (Superior = 0, Inferior = 0, Final = 0 e Inicial = 0) para Ver y centrar el texto de la etiqueta

Finalmente, debería tener algo así en el esquema del documento:

ingrese la descripción de la imagen aquí

Y algo así en tu ViewController:

ingrese la descripción de la imagen aquí

Espero que pueda ayudar.


2

Rápido:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

1

Este para una alternativa a Swift 4 (ya responde @Josh):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

1

iOS 11

ingrese la descripción de la imagen aquí

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
}

1

Para que Objective-C establezca la fuente y el color

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

0

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

0

No olvide agregar los valores Raw 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

0

Rápido 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

0

Agregar esta extensión

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

Agregue la siguiente línea en viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

Trabajar en swift 3.0 Para cambiar el color del título, debe 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
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.