2010-10-30 30 views

Respuesta

14

La vista del título puede ser cualquier vista. Así que simplemente cree un UILabel u otra cosa donde cambie la fuente y asigne esa nueva vista a la propiedad del título del elemento de navegación.

+0

Eso es una gran idea, pero tengo un problema ahora, .. Cuando agrego mi UILabel mis controles (como AddButton) en el UINavigationController no es visible más , .. * hm * –

+0

Lo arreglé, por mi cuenta .. lo siento por mal entendido;) –

+1

si esto solucionó el problema, no olvides aceptar la solución provista en la respuesta – Erik

10

Un ejemplo:

-(void) viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    CGRect frame = CGRectMake(0, 0, 400, 44); 
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [FontHelper fontFor:FontTargetForNavigationHeadings]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor whiteColor]; 
    label.text = self.navigationItem.title; 
    // emboss in the same way as the native title 
    [label setShadowColor:[UIColor darkGrayColor]]; 
    [label setShadowOffset:CGSizeMake(0, -0.5)]; 
    self.navigationItem.titleView = label; 
} 
+0

+1 para esto. Si viewControllers en la pila requiere una fuente diferente para el título, entonces '[UINavigationBar apariencia]' no puede hacer el trabajo. Un título personalizado es el único método. – BabyPanda

+4

es mejor poner este código en viewDidLoad, de lo contrario, cada vez que aparezca la vista en la jerarquía, se creará titleView y su trabajo innecesario en el sistema – raw3d

71

A partir de iOS 5 se puede cambiar la fuente a través del proxy apariencia.

https://developer.apple.com/documentation/uikit/uiappearance

El siguiente será establecer la fuente del título para todos los UINavigationControllers.

NSMutableDictionary *titleBarAttributes = [NSMutableDictionary dictionaryWithDictionary: [[UINavigationBar appearance] titleTextAttributes]]; 
    [titleBarAttributes setValue:[UIFont fontWithName:@"Didot" size:16] forKey:NSFontAttributeName]; 
    [[UINavigationBar appearance] setTitleTextAttributes:titleBarAttributes]; 

para establecer la fuente para el botón de retroceso, hacer esto:

NSMutableDictionary *attributes = [NSMutableDictionary dictionaryWithDictionary: [[UIBarButtonItem appearance] titleTextAttributesForState:UIControlStateNormal]]; 
    [attributes setValue:[UIFont fontWithName:@"Didot" size:12] forKey:NSFontAttributeName]; 
    [[UIBarButtonItem appearance] setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
+4

iOS 7 desaprobó la clave: UITextAttributeFont (leer, no usar esto) y ahora utiliza la clave: NSFontAttributeName en su lugar. Funciona de maravilla y hace que mi aplicación se vea muchísimo mejor. ¡Gracias! –

+1

En cada controlador de vista individual también puede establecer los atributos de texto de título en la instancia de la barra de navegación actual para personalizar el aspecto allí, como este fragmento de código: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSFontAttributeName: [UIFont fontWithName: @ " Palatino-Bold "tamaño: 28], NSForegroundColorAttributeName: [UIColor whiteColor]}]; – CodePlumber

18

para iOS8 + que puede utilizar:

[self.navigationController.navigationBar setTitleTextAttributes:@{ NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:18.0f], 
                    NSForegroundColorAttributeName: [UIColor whiteColor] 
                    }]; 
+3

Gracias esto me dio la dirección correcta para implementar una fuente personalizada con swift: self.navigationController? .navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont (nombre: "MyFont", tamaño: 18.0)!] – NBoymanns

+0

¡Gracias, amigo! Resuelto. – Felipe

+2

Siempre triste al probar primero todas las respuestas anteriores solo para descubrir que la de abajo es la más moderna \: – hashier

1

La respuesta de @morgancodes establecerá el tipo de letra para todos UINavigationController títulos. He puesto al día por Swift 4:

let attributes = [NSAttributedStringKey.font: UIFont(name: "Menlo", size: 14) as Any] 
UINavigationBar.appearance().titleTextAttributes = attributes 
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, for: .normal) 
Cuestiones relacionadas