2012-01-23 14 views
27

En Xcode, creé un UILabel que se convertirá automáticamente según la cantidad de líneas de texto que ponga en él. Pero no quiero que la altura de la UILabel exceda un cierto límite (240 en mi ejemplo), el código es el siguiente:cómo agregar una función de desplazamiento a un UILabel

NSString *text = @"imagine this is a huge wall of text\n\n\n" 
UILabel *myLabel = [[UILabel alloc] init]; 
[myLabel setNumberOfLines:0]; 
CGSize labelSize = [text sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(280, 240) lineBreakMode:myLabel.lineBreakMode]; 
myLabel.frame = CGRectMake(0, 0, 280, labelSize.height); 

Esto funciona bien cuando mi texto está dentro de unos 10-15 líneas. Pero si pongo algo así como 40 líneas de texto, las líneas de texto adicionales irán más allá de mi UILabel y se cortarán.

¿cómo puedo agregar una función de desplazamiento a myLabel para que myLabel todavía tenga una altura máxima de 240, y simplemente puedo desplazarme hacia abajo para ver esas líneas de texto adicionales en myLabel?

+0

tal vez esto puede ayudar http://stackoverflow.com/a/16860529/1463604 – Nishant

+0

De los 26k usuarios vieron esta pregunta solamente 19 votos a favor !! extraño! –

Respuesta

96

Use UITextView (reference).

Está diseñado para hacer exactamente eso. Deshabilita la edición y obtienes una etiqueta desplazable.

+4

Tenga en cuenta que UITextView no reemplaza a UILabel. Por ejemplo (a partir de iOS 6), cuando configura una fuente en un UILabel con texto atribuido, ese cambio "se pega"; Cuando configura una fuente en una UITextView, el cambio solo se aplica a cualquier atributo que ya esté en UITextView: si asigna una nueva cadena atribuida, la fuente que estableció previamente no se reflejará. (Esta fue mi experiencia trabajando con esto esta noche, al menos.) –

+1

@JonSchneider es UITextView todavía la cosa "correcta" para usar hoy? – rottenoats

+0

@rugdealer Temo que no puedo darte una respuesta sólida de inmediato; No he hecho un desarrollo serio de iOS desde finales de 2014. –

1

Usted puede añadir su UILabel en un UIScrollView como este y también se puede hacer como esto ---

scrollView.backgroundColor = [UIColor clearColor]; 

     UILabel * label = [[UILabel alloc] init]; 
     [label setNumberOfLines:0]; 
     label.text=[detailDict valueForKey:@"ABC"]; 
     [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]]; 
     CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap]; 
     int y=0; 
     label.frame=CGRectMake(38, y, 245, labelsize.height); 
     [label setBackgroundColor:[UIColor clearColor]]; 
     [label setTextColor:[UIColor whiteColor]]; 
     scrollView.showsVerticalScrollIndicator = NO; 
     y+=labelsize.height; 
     [scrollView setContentSize:CGSizeMake(200,y+50)]; 
     [scrollView addSubview:label]; 
     [label release]; 

Aquí Y se utiliza para aumentar o disminuir el tamaño de la etiqueta como el texto.

+1

Siempre es una forma incorrecta de hacer las cosas si tienes mejores opciones. :( –

+0

Esto es realmente una excelente solución para aquellos de ustedes que se han cansado del creciente número de problemas con el comportamiento de desplazamiento de UITextView. Especialmente cuando se mezcla con barras de navegación transparentes. A veces se desplaza a veces no funciona. Esta solución funciona en lugares una UITextView no lo hará. -rrh –

Cuestiones relacionadas