2011-06-08 17 views
5

Estoy encontrando poca información sobre el uso de UINavigationItem # titleView con una fuente personalizada. Cuando lo he hecho, la fuente está desalineada verticalmente en la barra de navegación.UINavigationItem # titleView problemas de alineación

Esta entrada es en parte para documentar un truco, y también esperando que alguien tenga una respuesta concisa a este problema, ya que siento que me falta algo simple.

En primer lugar el corte, usando mi propia clase derivada UILabel:

@interface NavigationItemLabel : UILabel 
- (void)setFrame:(CGRect)frame; 
@end 

@implementation NavigationItemLabel 
- (void)setFrame:(CGRect)frame { 
    // Called by UINavigationBar layoutSubviews. 
    frame.origin.y -= self.font.descender; 
} 
@end 

Por alguna razón, == frame.origin.y -11, no importa qué fuente que utilizo. ¿Alguien tiene alguna intuición de por qué es esto?

Agregar el descendiente de mi fuente (fuente personalizada llamada Gabriola) parece ayudar. Sin este truco, el texto se alinea con la parte inferior de los descensores en el centro de la barra de navegación.

Esto no funciona con todas las fuentes.

¿Alguien tiene una mejor solución?

Gracias.

+0

Una posible pista es la sugerencia de Sjors Provoost de utilizar sizeToFit con respecto a una pregunta relacionada: [link] (http://stackoverflow.com/questions/3125245/uinavigationitem-titleview-position) – Wienke

Respuesta

3

Si va a distribuir a iOS 5+, se puede consultar la titleVerticalPositionAdjustmentForBarMetrics propiedad del en el UINavigationBar documentation:

- (CGFloat)titleVerticalPositionAdjustmentForBarMetrics:(UIBarMetrics)barMetrics 
Returns the title’s vertical position adjustment for given bar metrics. 

También, usted debe comprobar fuera de titleTextAttributes (también iOS5 +), que se puede utilizar para establecer una fuente personalizada:

NSDictionary *attributes = @{ 
    UITextAttributeFont: yourFont 
}; 
[navBar setTitleTextAttributes:attributes]; 

Si eres NO en IOS5, me gustaría sugerir que envuelve el interior de un UILabelUIView y el establecimiento r UIView como titleView en su lugar (esto le permite ajustar aún más la posición de la etiqueta envuelta cambiando su frame).

Si tiene acceso a los videos de la WWDC 2012 (es decir, si tiene una cuenta de desarrollador), le recomiendo encarecidamente que vea la conversación en Advanced Appearance Customization on iOS (este material está incluido allí).

Espero que ayude de alguna manera.

0

Tuve el mismo problema al usar Grotesque y había una gran solución de SO mostrada por @kolyuchiy here. (Implica descargar las utilidades de línea de comandos Apple Font Tool Suite y ajustar el atributo ascender para su fuente personalizada).

Cuestiones relacionadas