2011-12-25 14 views
15

Mi aplicación de iPhone tiene un controlador de barra de pestañas y en cada pestaña (4 pestañas) hay un UINavigationController que quiero que sea de un color diferente y cambie la fuente en el título, así que hice mi propio controlador de navegación personalizado para usar en todas partes, por lo que esos cambios solo están en 1 lugar. El tinte es fácil y funciona bien, pero cuando intento establecer la fuente usando setTitleTextAttributes, cambia la fuente, pero en algunas vistas el título aparece cortado al final (es decir, "My titl ..."). Si cambio las vistas y vuelvo a la vista con el título cortado, el título sí aparece correctamente.El título de UINavigationbar se corta al usar titleTextAttributes

Actualmente mi viewDidLoad en mi UINavigationController personalizada tiene:

UIFont *font = [UIFont fontWithName:@"GillSans-Bold" size:22]; 
NSDictionary *attr = [[NSDictionary alloc] initWithObjectsAndKeys:font, UITextAttributeFont, nil]; 
[self.navigationBar setTitleTextAttributes:attr]; 

Mi pensamiento era que está cambiando la fuente de la titleview pero no está siendo cambiado el tamaño de acuerdo al nuevo tamaño (ya que es un tipo de letra más grande). Otro problema es cuando el teléfono cambia a horizontal, las letras que cuelgan bajas (g, p, y) tienen los fondos cortados. ¿Hay alguna forma de cambiar el tamaño de la etiqueta o permitir que se establezca un mínimo de tamaño de texto para que el texto simplemente se contraiga cuando es demasiado grande?

Respuesta

3

Esto funcionó para mí

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self setTitle:self.station.title]; 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 400, 44)]; 
    label.backgroundColor = [UIColor clearColor]; 
    [label setFont:[UIFont fontWithName:@"GillSans-Bold" size:24.0]]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor whiteColor]; 
    label.adjustsFontSizeToFitWidth = YES; 
    label.text = self.title;  
    self.navigationItem.titleView = label; 
} 
+5

Rutina fea, la creación de un nuevo título de la vista? ugh ... –

0

Creo que este problema es w.r.trootviewcontroller. La barra de pestañas se define en su controlador de vista raíz ¿verdad?

Desde allí, si presiona y abre mediante los controles de navegación, todos los contenidos serán los mismos independientemente de la navegación.

0

Esto funcionó para mí:

+ (void)setNavBarTitle:(NSString *)title forUINavigationItem:(UINavigationItem*)navigationItem 
{ 
    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)] autorelease]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [UIFont boldSystemFontOfSize:24]; 
    label.textAlignment = UITextAlignmentCenter; 
    label.baselineAdjustment = UIBaselineAdjustmentAlignCenters; 
    label.textColor = [UIColor whiteColor]; 
    label.adjustsFontSizeToFitWidth = YES; 
    label.text = title; 
    [label sizeToFit]; 
    navigationItem.titleView = label; 
} 
Cuestiones relacionadas