2011-05-13 14 views
23

Tengo una UINavigationBar personalizada (diferente tamaño, fondo, etc.) que tiene dentro de una vista de título personalizada. He utilizado este código para lograrlo:Posición del título personalizado UINavigationBar

UIView * mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)]; 
    mainView.backgroundColor = [UIColor yellowColor]; 

    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0,0,kScreenWidth,80)]; 
    navBar.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

    UINavigationItem *currentItem = [[UINavigationItem alloc] init]; 
    UILabel *label = [[UILabel alloc] init]; 
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size: 30.0]; 
    [label setBackgroundColor:[UIColor clearColor]]; 
    [label setTextColor:[UIColor whiteColor]]; 
    [label setText:self.title]; 
    [label sizeToFit]; 
    [currentItem setTitleView:label]; 
    [label release]; 

    [navBar pushNavigationItem:currentItem animated:NO]; 
    [currentItem release]; 

    [mainView addSubview:navBar]; 
    [navBar release];  

    self.view = mainView; 
[mainView release]; 

Sin embargo, mi problema ahora es que, incluso si se añade correctamente el título de la vista personalizada, no se centra verticalmente con la barra de navegación. Lo que me estoy perdiendo?

Gracias!

+7

Para el amor de ... ** código duros no ** los tamaños de pantalla, Apple ha evangelizado sobre esto desde que se lanzó por primera vez el SDK de iPhone. Use '[UIScreen mainScreen] .applicationFrame', y funcionará en iPhone/iPad o en cualquier dispositivo futuro. Con y sin la barra de estado más grande cuando está en una llamada, o tethering. – PeyloW

+0

¡Gracias PeyloW, lo tendremos en cuenta a partir de ahora! –

+0

No use el marco de UIScreen, le dará un tamaño incorrecto cuando su aplicación esté en modo de pantalla dividida en iOS 9. Use el marco de la ventana en su lugar. –

Respuesta

97

Puede utilizar setTitleVerticalPositionAdjustment:forBarMetrics: en IOS 5 para cambiar la posición del título, que funciona en el título de ejemplo, la normalidad:

CGFloat verticalOffset = -4; 
[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault]; 
+8

esta es la respuesta correcta –

+1

@Valentino: debe aceptar esta como la respuesta correcta. – Armin

+0

Desafortunadamente, a veces es necesario compensar un título horizontalmente desde el centro para que se vea bien. Por ejemplo, en una UINavigationBar, es posible que tenga un botón que dice "Cancelar" a la izquierda y "Hecho" a la derecha. Aunque el título está centrado en la barra, no está centrado entre los botones y no se ve bien. Así que trabajar con UINavigationBarItem.titleView podría ser el camino a seguir en algunos casos. – clearlight

0

Creó UINavigationBar con una altura de 80 puntos, cuando un estándar UINavigationBar tiene 44 puntos. Posiblemente lo ubique centrado en un centro de 44 puntos ...

Puede tratar de hacer un UIView con una altura de 80 puntos y agregar el UILabel centrado en su interior. (No probado, sólo una suposición)

+0

Tuve la misma sensación, pero hice que el 'UINavigationBar' fuera aún más grande y, sin embargo, el título mantuvo su posición (varios puntos sobre la línea inferior de' UINavigationBar'). Básicamente, no importa cuán grande sea la 'UINavigationBar', el título estará varios puntos por encima de su línea inferior. Intentaremos lo de UIView de inmediato e informaremos. –

+0

agregando un trabajo más grande de UIView (si lo configuro del mismo tamaño que 'UINavigationBar') Gracias. –

Cuestiones relacionadas