Funciona muy bien para cadenas de varias líneas también.
Básicamente es una función que le permite ver qué tan grande va a ser una cuerda cuando se procesa con un modo de fuente y salto de línea.
Lo uso en algunos puntos en mi aplicación cuando tengo texto de longitud variable que quiero mostrar en un área determinada.
Por defecto, UILabel centrará el texto verticalmente. Para alinear el texto, es necesario que el tamaño de la etiqueta sea el alto requerido por la cadena que contiene.
Utilizo este método para hacer esto.
Y ejemplo de cómo lo usaría para hacer eso es como sigue:
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
Se especifica qué tan grande de un área que tiene que poner el texto, y luego este método le indica la cantidad de espacio ocupará (envolviendo según sea necesario). Además, si la cadena se desbordará en los límites de la recta que proporcione, podrá saber y luego decidir cómo mostrar el texto.
La referencia a que no está envolviendo el texto está allí porque este método no le hace nada al texto. Simplemente lo establece y devuelve la cantidad de área que necesitaría para diseñarlo.
es responsabilidad de la etiqueta (o del contenedor que esté utilizando para el texto) realizar la envoltura/lo que sea que deba hacerse.
Espero que ayude.
chris.
newFrame.size.height = maximumLabelSize .height; SB: newFrame.size.height = expectedLabelSize.height; – JoBu1324
funciona incluso cuando dibujas un rect! – tipycalFlow