2011-09-13 11 views
6

Estoy configurando un marco UILabels basado en lo que devuelve UIFont sizeWithFont, pero por alguna razón cuando uso una fuente personalizada, los valores que se devuelven incluyen algo de relleno como se ve a continuación.¿Por qué UIFont sizeWithFont incluye espacio en blanco en su cálculo?

Cuando uso boldSystemFontOfSize el texto está alineado verticalmente en el medio (que es lo que quiero), pero cuando se utiliza fontWithName i terminan con el acolchado bajo el texto. ¿Alguna razón por la cual sizeWithFont está agregando en el relleno?

enter image description here

Heres mi código ...

CGRect frameLabel = label.frame; 
CGSize sizeLabel = [label.text sizeWithFont:label.font]; 
frameLabel.size.width = sizeLabel.width; 
frameLabel.size.height = sizeLabel.height; 
[label setBackgroundColor:[UIColor redColor]]; 

** Editar **

puedo calcular el relleno superior e inferior utilizando este código y ajustar las etiquetas frame.origin .y para centrar verticalmente mi etiqueta donde debe estar

float topPadding = [label.font ascender] - [label.font capHeight]; 
float bottomPadding = [label.font lineHeight] - [label.font ascender]; 
+0

¿es posible que el tipo de letra que estoy utilizando inclu "Gotham" des este relleno y yo tendría que editar la fuente? – AlBeebe

Respuesta

3

La fuente es la única causa posible de este relleno, pero si solo necesita etiquetas de una línea, no pierda el tiempo editando la fuente, solo reduzca la altura de la etiqueta en esos pocos píxeles después de establecer un marco adecuado haciendo algo como esto:

label.frame = CGRectInset(label.frame, 0, bottomPadding); 

Además, en lugar de:

CGRect frameLabel = label.frame; 
CGSize sizeLabel = [label.text sizeWithFont:label.font]; 
frameLabel.size.width = sizeLabel.width; 
frameLabel.size.height = sizeLabel.height; 

puede simplemente llaman:

[label sizeToFit]; 
+0

Usted confirmó mi sospecha. Por curiosidad, ¿tienes alguna idea de qué propiedad de la fuente está causando este relleno extra en la parte inferior? – AlBeebe

+0

Acabo de confirmar al 100% que es la fuente real la que está causando el problema como usted dijo. Descargué FontForge y cambié cada configuración de gotham.ttf para que coincida con lo que Helvetica.ttf tiene y pude eliminar el relleno extra. – AlBeebe

+0

Hola AlBeebe. Estoy teniendo el mismo problema e intento cambiar algunas propiedades de fuente con FontForge. ¿Podrías explicarme qué valores cambiaste? ¡Muchas gracias! – LocoMike

Cuestiones relacionadas