ios - una - Múltiples líneas de texto en UILabel.
para definir un cuadro de texto en el que se pueden escribir múltiples líneas de texto se emplea: (25)
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;
¿Hay alguna forma de tener varias líneas de texto en UILabel
como en el UITextView
o debo usar la segunda?
En IB, establezca el número de líneas a 0 (permite líneas ilimitadas)
Al escribir dentro del campo de texto usando IB, use "alt-return" para insertar una devolución y pasar a la siguiente línea (o puede copiar en un texto ya separado por líneas).
En esta función, pase la cadena que desea asignar en etiqueta y pase el tamaño de fuente en lugar de self.activityFont y pase 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;
}
Encontré una solución.
Solo hay que añadir 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 soportar iOS por debajo de 6.0):
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
En el lado: ambos valores de enumeración rinden a 0
todos modos.
Establecido a continuación, ya sea en el código o en el guión gráfico
Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;
y, por favor, no olvide establecer las restricciones izquierda, derecha, superior e inferior para la etiqueta, de lo contrario no funcionará.
Estas cosas me ayudaron
Cambia estas propiedades de UILabel
label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;
Y mientras da una cadena de entrada, use / n para mostrar diferentes palabras en diferentes líneas.
Ejemplo:
NSString *message = @"This /n is /n a demo /n message for /n " ;
Este código está devolviendo 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;
}
Estoy de acuerdo con Jarred Olson, NSLineBreakByWordWrapping está predeterminado . Agregué la propiedad sizeToFit como la guía de Gurumoorthy Arumugam para arreglarla.
Si desea que la fuente dentro de su etiqueta se ajuste para que se ajuste a los límites de la etiqueta. Puedes usar :
textLabel.adjustsFontSizeToFitWidth = YES;
Gracias a todos.
La mejor solución que he encontrado (para un problema frustrante que debería haberse resuelto en el marco) es similar al de vaychick.
Solo establece el número de líneas a 0 en IB o en el código
myLabel.numberOfLines = 0;
Esto mostrará las líneas necesarias pero volverá a colocar la etiqueta de modo que esté centrada horizontalmente (de modo que una línea de 1 y 3 etiquetas de línea estén alineadas en su posición horizontal). Para arreglar ese complemento:
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;
Puede usar /r
para ir a la siguiente línea mientras llena la UILabel
usando NSString
.
UILabel * label;
label.text = [NSString stringWithFormat:@"%@ /r %@",@"first line",@"seconcd line"];
Puedes hacerlo a través del Storyboard también:
- Seleccione la etiqueta en el controlador de vista
- En el Inspector de atributos, aumente el valor de la opción Línea (Presione Alt + Cmd + 4 para mostrar el Inspector de atributos)
- Haga doble clic en la etiqueta en el controlador de vista y escriba o pegue su texto
- Cambie el tamaño de la etiqueta y / o aumente el tamaño de la fuente para que se muestre todo el texto.
Si tienes que usar el:
myLabel.numberOfLines = 0;
También puede usar un salto de línea estándar ("/n")
, en el código, para forzar una nueva línea.
Swift 4:
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.preferredMaxLayoutWidth = superview.bounds.size.width - 10
Use esto para tener múltiples líneas de texto en UILabel
:
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
Rápido:
textLabel.lineBreakMode = .byWordWrapping
textLabel.numberOfLines = 0
Use story borad: seleccione la etiqueta para establecer el número de líneas a cero ...... O consulte esto
Ya respondí, pero también puedes hacerlo manualmente en el guión gráfico. En el Inspector de atributos de la etiqueta, puede cambiar los saltos de línea a ajuste de palabra (o ajuste de carácter).
deberias 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;
}
Swift 3
Establezca el número de líneas cero para la información de texto dinámico, será útil para texto variable.
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
intentemos esto
textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated
textLabel.numberOfLines = 0;
Try using this code:
lblName.numberOfLines = 0;
[lblName sizeToFit];
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 algunas razones no funciona para mí en iOS 6, no estoy seguro de por qué. Lo intenté con y sin texto atribuido. Alguna sugerencia.
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
La solución anterior no funciona en mi caso. Estoy haciendo así:
- (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);
//...
}