2012-03-16 13 views
6

En mi aplicación para iPhone configuré una fuente personalizada para todos los UILabels (para ser más precisos, subclasé UILabel, anulando un método, estableciendo la fuente personalizada en ese método y luego estableciendo todas las etiquetas en IB para esa clase personalizada). El problema ahora es que todos los textos se representan demasiado por debajo de la línea base esperada, por lo que las letras como 'y' y 'g' se cortan a continuación. He leído acerca de problemas similares aquí:UILabel con fuente personalizada erróneamente renderizada

UIButton custom font vertical alignment

Custom installed font not displayed correctly in UILabel

Luego probé perder el tiempo con el ascendente como se describe en las soluciones (que se establece en 990 inicialmente). Ponerlo en alrededor de 500 dio buenos resultados, pero no mucho después, noté que las líneas en los textos de líneas múltiples se mezclaban entre sí, lo que por supuesto no es aceptable. En UITextViews, la fuente parece mostrar bien con la línea de base inicial ...

¿Existe alguna forma práctica de resolver este problema? Por supuesto, podría guardar varias fuentes con diferentes ascendentes para textos de línea única o múltiple, pero esa es una solución bastante complicada.

PD: La fuente se proporciona en formato otf, aunque intenté convertirla a ttf , lo que lleva a los mismos resultados.

Respuesta

6

Bien, por si acaso alguien está interesado, descubrí una solución alternativa que debería funcionar para mí. Simplemente consiste en anular el método drawTextInRect de UILabel, modificar el rectángulo dado y pasarlo al método de la superclase.

- (void)drawTextInRect:(CGRect)rect { 
    CGFloat pointSize = self.font.pointSize; 

    CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y - (0.25 * pointSize), rect.size.width, rect.size.height); 

    [super drawTextInRect:newRect]; 
} 

que podría tener que probar diferentes valores distintos de 0,25, aunque ...

+0

He utilizado este. - (void) drawTextInRect: (CGRect) rect { CGFloat pointSize = self.font.pointSize; CGRect newRect = CGRectMake (rect.origin.x, rect.origin.y + (0.2 * pointSize), rect.size.width, rect.size.height); [super drawTextInRect: newRect]; } – kgibbon

Cuestiones relacionadas