2012-02-03 11 views
5

Sé que hay muchos hilos similares a esto, pero los he leído todos (hasta donde puedo decir) y no he visto el mismo problema que estoy teniendo.¿Forzar texto para que quepa en UILabel verticalmente?

Estoy tratando de obtener todo el texto para mostrar en una etiqueta VERTICALMENTE.

Déjame explicarte: las fuentes no siempre se crean de la misma manera, por lo que su altura total puede ser la misma (24 puntos, por ejemplo). Sin embargo, el Ascender y el Descender varían ampliamente: una fuente puede estar en su mayoría por encima de la línea de base, mientras que otra está en su mayoría por debajo. Por lo tanto, es posible que el mismo texto, con diferentes fuentes, no siempre se muestre en la misma vista/etiqueta.

Por ejemplo, vea las capturas de pantalla a continuación.

El primero es Helvetica-Bold 300pts. El segundo es Apple Gothic 300pts.

Observe cómo se corta la parte inferior de la "g" con Helvetica (y muchas otras fuentes también, pruébelo, verá).

Helvetica-Bold300

AppleGothic

Así que mi problema es el siguiente: Me gustaría ser capaz de ver todo el texto, independientemente de la fuente. Si el texto en el ejemplo "Helvetica" pudiera moverse hacia arriba (y centrado) dentro de la etiqueta, resolvería mi problema. Para hacerlo más fácil, solo necesito mostrar una sola línea.

Desafortunadamente, ninguna de las soluciones que he visto involucra a los descendientes y los ascendentes de la fuente y descifrar cómo dibujar el texto dentro de un Rect y no recortarlo. Tenga en cuenta que las soluciones de "Alineación vertical" en varios subprocesos no solucionan este problema en particular.

¿Alguien tiene alguna idea o solución para esto?

Respuesta

2

La manera más simple es subclase UILabel y hacer uso del método - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode de NSString que se encuentra en el NSString UIKit additions.

Puede anular - (void)setFont en su sublcass, probar si el tamaño de fuente funcionará en la vista, y si es demasiado grande, hágalo más pequeño hasta que quepa.

+0

Gracias, pero las imágenes que he publicado ya son el resultado de la subclasificación usando VerticalAlignment y 'sizetofit'. El tamaño de la fuente no es el problema, como puede ver, hay mucho espacio para el texto, simplemente no está alineado correctamente. – wayneh

+0

Bien, pero mira el método sizeWithFont que te dará la altura de la cadena, y si lo sabes, puedes centrarlo tú mismo y luego dibujar la cadena con drawStringAtPoint. Solo lea el enlace; le brinda todo lo que necesita para lograr esto. – sosborn

+0

OK, lo verificaré y veré qué puedo hacer. – wayneh