iOS 11

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
Tommie C.
fuente

Respuestas:

21

Prueba esto:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;
Akki
fuente
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)
Libor Zapletal
fuente
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)!]
Renish Dadhaniya
fuente
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{}
Praveen Hiremath
fuente
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)!]
Karl Taylor
fuente
2

Es un poco más legible usando literales:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };
sPoz
fuente
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.

O. Boujaouane
fuente
2

Rápido:-

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]
karthik
fuente
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
Hendra Kusumah
fuente
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
}
Vivek
fuente
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];

}
Hardik Thakkar
fuente
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
Josh
fuente
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
James Rochabrun
fuente
0

Rápido 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]
ilkayaktas
fuente
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()
Pranit
fuente
-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
vikram
fuente