2009-09-06 15 views
6

Imagine un UILabel, que tiene 200 píxeles de ancho y 50 píxeles de alto. La etiqueta tiene texto dentro y la etiqueta hace que el texto sea más pequeño para que encaje en la etiqueta. Pero ahora, ¿cómo obtendrías el tamaño de ese UIFont cómo es visible en la etiqueta? Imaginemos que el tamaño de fuente fue dado con 100 enormes, y la etiqueta lo reduce a 15. Y luego, quiere hacer algunas otras etiquetas con poco texto, que tiene el mismo tamaño de letra. ¿Hay alguna manera de obtener el tamaño de letra de UIFont después de ser exprimido por la etiqueta?¿Cómo calcular el tamaño de un UIFont cuando el texto de la etiqueta está restringido para ajustarse al ancho?

Respuesta

15

Si pasa el tamaño de la UILabel y la breakMode, etc., para:

CGSize size = [label.text sizeWithFont:label.font minFontSize:10 actualFontSize:&actualFontSize forWidth:200 lineBreakMode:UILineBreakModeTailTruncation]; 

actualFontSize debe ser lo que usted está buscando.

ACTUALIZACIÓN:

Lo anterior ha quedado en desuso. El método a utilizar ahora es:

- (CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines 

He aquí un ejemplo

CGSize size = [label textRectForBounds:label.bounds 
    limitedToNumberOfLines:1].size; 
+0

Así actualFontSize habría una CGSize la que me pase por referencia a ese método? –

+0

Sí. En C y Obj C, una función está restringida en cómo puede devolver valores. Los argumentos que pasa a una función se evalúan y su valor se inserta en la pila, antes de llamar a la función. La función solo obtiene esos valores y no puede transmitir un valor de retorno en ellos. A menos que lo que se empuje sea un puntero, en cuyo caso la función puede usar un puntero para escribir en su dirección y modificarla. Estoy simplificando demasiado - aquí el valor actual de FontSize es uno de los valores devueltos de la función (método). – mahboudz

+0

Esto está en desuso en iOS7. ¿Hay un reemplazo iOS8? –

Cuestiones relacionadas