2011-03-03 8 views
5

Tengo un pequeño problema con UILabel de líneas múltiples, mi texto UILabel parece extraño desde el medio y sube cuando llegan nuevas líneas, de modo que la última línea está en el medio siempre. Quiero que se comporte como una vista de texto normal, comenzando desde la parte superior y las líneas pasando una debajo de la otra, la primera línea queda arriba. ¡Lo siento si lo expliqué mal, puedo tratar de elaborar si es necesario! ¡Gracias por adelantado!Haciendo que UILabel de varias líneas empiece el texto desde la parte superior, no al medio

Respuesta

11

Puede usar el método sizeWithFont:constrainedToSize:lineBreakMode: en NSString para determinar la altura de un bloque de texto dado una fuente y un ancho restringido. Luego, debe actualizar el marco de la etiqueta para que sea lo suficientemente grande como para abarcar el texto.

CGSize textSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:label.lineBreakMode]; 
label.frame = CGRectMake(20.0f, 20.0f, textSize.width, textSize.height); 
+0

Tienes mi agradecimiento! –

+1

Es posible que también deba establecer 'label.numberOfLines = 0' –

0

Desde método sizeWithFont se decprecated en IOS 7.0 +, se puede utilizar un método alternativo llamado boundingRectWithSize.

Por ejemplo:

NSDictionary *attrsDictionary =[NSDictionary dictionaryWithObject:YourFont forKey:NSFontAttributeName]; 
NSAttributedString *attrString =[[NSAttributedString alloc] initWithString:yourString attributes:attrsDictionary]; 

textRect = [attrString boundingRectWithSize:yourSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; 
Cuestiones relacionadas