Varias líneas de texto en UILabel

¿Hay alguna manera de tener varias líneas de texto en UILabel como en el UITextView o debería usar el segundo?

Encontré una solución.

Uno solo tiene que agregar el siguiente código:

 // Swift textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping textLabel.numberOfLines = 0 // For Swift >= 3 textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B' textLabel.numberOfLines = 0 // Objective-C textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.numberOfLines = 0; // C# (Xamarin.iOS) textLabel.LineBreakMode = UILineBreakMode.WordWrap; textLabel.Lines = 0; 

Respuesta antigua restaurada (para referencia y desarrolladores dispuestos a admitir iOS por debajo de 6.0):

 textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 0; 

En el lado: ambos valores enum ceden a 0 todos modos.

En IB, establece el número de líneas en 0 (permite líneas ilimitadas)

Al escribir dentro del campo de texto usando IB, use “alt-return” para insertar una devolución y vaya a la siguiente línea (o puede copiar el texto ya separado por líneas).

La mejor solución que he encontrado (para un problema frustrante que debería haberse resuelto en el marco) es similar a la de Vaychick.

Simplemente establece el número de líneas en 0 en IB o código

 myLabel.numberOfLines = 0; 

Esto mostrará las líneas necesarias, pero reubicará la etiqueta de modo que esté centrada horizontalmente (de modo que una etiqueta de 1 línea y 3 líneas estén alineadas en su posición horizontal). Para arreglar ese agregado:

 CGRect currentFrame = myLabel.frame; CGSize max = CGSizeMake(myLabel.frame.size.width, 500); CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; currentFrame.size.height = expected.height; myLabel.frame = currentFrame; 

Use esto para tener varias líneas de texto en UILabel :

 textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.numberOfLines = 0; 

Rápido:

 textLabel.lineBreakMode = .byWordWrapping textLabel.numberOfLines = 0 
 myUILabel.numberOfLines = 0; myUILabel.text = @"your long string here"; [myUILabel sizeToFit]; 

Si tiene que usar el:

 myLabel.numberOfLines = 0; 

propiedad también puede usar un salto de línea estándar ("\n") , en código, para forzar una nueva línea.

Puede usar \r para ir a la línea siguiente mientras completa UILabel usando NSString .

 UILabel * label; label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"]; 

intentemos esto

 textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated textLabel.numberOfLines = 0; 
 textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 0; 

La solución anterior no funciona en mi caso. Estoy haciendo esto:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // ... CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap]; return size.height + 20; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { // ... cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; cell.textLabel.numberOfLines = 0; cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0]; } // ... UILabel *textLabel = [cell textLabel]; CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap]; cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20); //... } 

Use story borad: seleccione la etiqueta para establecer el número de líneas a cero …… O refiera esto

enter image description here

 UILabel *helpLabel = [[UILabel alloc] init]; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label]; helpLabel.attributedText = attrString; // helpLabel.text = label; helpLabel.textAlignment = NSTextAlignmentCenter; helpLabel.lineBreakMode = NSLineBreakByWordWrapping; helpLabel.numberOfLines = 0; 

Por alguna razón, no funciona para mí en iOS 6, no estoy seguro de por qué. Intenté con y sin texto atribuido. Alguna sugerencia.

 Try using this code: lblName.numberOfLines = 0; [lblName sizeToFit]; 

Swift 3
Establezca el número de líneas cero para la información de texto dynamic, será útil para variar el texto.

 var label = UILabel() let stringValue = "A label\nwith\nmultiline text." label.text = stringValue label.numberOfLines = 0 label.lineBreakMode = .byTruncatingTail // or .byWrappingWord label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame 

enter image description here

deberías probar esto:

 -(CGFloat)dynamicLblHeight:(UILabel *)lbl { CGFloat lblWidth = lbl.frame.size.width; CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:lbl.font} context:nil]; return lblTextSize.size.height; } 

Estas cosas me ayudaron

Cambia estas propiedades de UILabel

 label.numberOfLines = 0; label.adjustsFontSizeToFitWidth = NO; label.lineBreakMode = NSLineBreakByWordWrapping; 

Y al usar String use \ n para mostrar diferentes palabras en diferentes líneas.

Ejemplo:

  NSString *message = @"This \n is \na demo \n message for \n stackoverflow" ; 
 UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; [labelName sizeToFit]; labelName.numberOfLines = 0; labelName.text = @"Your String..."; [self.view addSubview:labelName]; 

Puedes hacerlo a través del Storyboard también:

  1. Seleccione la etiqueta en el controlador de vista
  2. En el Inspector de atributos, aumente el valor de la opción Línea (presione Alt + Cmd + 4 para mostrar el Inspector de atributos)
  3. Haga doble clic en la etiqueta en el controlador de vista y escriba o pegue su texto
  4. Cambiar el tamaño de la etiqueta y / o boost el tamaño de la fuente para que todo el texto se pueda mostrar

Estoy de acuerdo con Jarred Olson, NSLineBreakByWordWrapping es el predeterminado . Agregué la propiedad sizeToFit como la guía de Gurumoorthy Arumugam para arreglarlo.

Si desea que la fuente dentro de su etiqueta se ajuste para ajustarse a los límites de la etiqueta. Puedes usar :

 textLabel.adjustsFontSizeToFitWidth = YES; 

Gracias a todos.

 UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)]; [textLabel sizeToFit]; textLabel.numberOfLines = 0; textLabel.text = @"Your String..."; 

Ya se respondió, pero también puedes hacerlo manualmente en el guión gráfico. En Attributes Inspector for the Label, puede cambiar Line Breaks to Word Wrap (o ajuste de caracteres).

En esta función, pase la cadena que desea asignar en la etiqueta y pase el tamaño de la fuente en lugar de self.activityFont y pase el ancho de la etiqueta en lugar de 235, ahora obtiene la altura de la etiqueta de acuerdo con su cadena. Funcionará bien.

 -(float)calculateLabelStringHeight:(NSString *)answer { CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil]; return textRect.size.height; } 

Establecer a continuación, ya sea en el código o en el guión gráfico en sí

Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;

y no se olvide de establecer las restricciones izquierda, derecha, superior e inferior para la etiqueta; de lo contrario, no funcionará.

En C #, esto funcionó para mí dentro de UITableViewCell.

  UILabel myLabel = new UILabel(); myLabel.Font = UIFont.SystemFontOfSize(16); myLabel.Lines = 0; myLabel.TextAlignment = UITextAlignment.Left; myLabel.LineBreakMode = UILineBreakMode.WordWrap; myLabel.MinimumScaleFactor = 1; myLabel.AdjustsFontSizeToFitWidth = true; myLabel.InvalidateIntrinsicContentSize(); myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height); myCell.ContentView.AddSubview(myLabel); 

Creo que el punto aquí es:

  myLabel.TextAlignment = UITextAlignment.Left; myLabel.LineBreakMode = UILineBreakMode.WordWrap; myLabel.MinimumScaleFactor = 1; myLabel.AdjustsFontSizeToFitWidth = true; 

Este código devuelve la altura del tamaño de acuerdo con el texto

 + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { CGFloat result = font.pointSize+4; if (text) { CGSize size; CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; size = CGSizeMake(frame.size.width, frame.size.height+1); result = MAX(size.height, result); //At least one row } return result; }