ios - ¿Cómo agregar un salto de línea para UILabel?
iphone newline (19)
// NO olvides poner numberOfLines a cero
UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd /nUK Apr 12"];
[cell addSubview:locationTitle];
Veamos que tengo una cuerda como esta:
NSString *longStr = @"AAAAA/nBBBBB/nCCCCC";
¿Cómo hago para que la UILabel muestre un mensaje como este?
AAAAA
BBBBB
CCCCC
No creo que /n
sea reconocido por UILabel, así que, ¿hay algo que pueda poner dentro de NSString para que UILabel sepa que tiene que crear un salto de línea allí?
En Swift 2.2,> iOS 8
He establecido Líneas = 0 en el Guión gráfico, bajo el Inspector de atributos y he vinculado una salida de referencia a la etiqueta. A continuación, utilice en el controlador de esta manera:
@IBOutlet weak var listLabel: UILabel!
override func viewDidLoad() {
...
listLabel.text = "Line 1/nLine 2/nLine 3/nLine 4/nLine 5/nLine 6/nLine 7/nLine 8"
}
En Xcode 6, puede usar / n incluso dentro de una cadena cuando usa ajuste de palabra. Funcionará. Así por ejemplo:
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"This will be on the first line/nfollowed by a line under it.";
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
En el generador de interfaces, puede usar Ctrl + Enter para insertar /n
en la posición que desee. De esta manera se podría implementar la siguiente situación.
aaa
aaaaaaa
En mi caso, / n no funcionaba, solucioné el problema manteniendo el número de líneas en 0 y copié y pegué el texto con la nueva línea, por ejemplo, en lugar de Hello / n World i pegado
Hola
Mundo
en el constructor de interfaces.
Es importante tener en cuenta que es /n
(barra invertida) en lugar de /n
.
He enfrentado el mismo problema, y aquí es cómo resolví el problema. Espero que esto sea de ayuda para alguien.
// Swift 2
lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
lblMultiline.numberOfLines = 0
// C objetivo
lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
lblMultiline.numberOfLines = 0;
// C # (Xamarin.iOS)
lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
lblMultiline.Lines = 0;
Me parece mal cambiar el tamaño de los marcos de las etiquetas, especialmente cuando se utiliza la función de reproducción automática. Usar el método appendFormat parece más apropiado. Aquí está mi ejemplo:
NSMutableString *list = [[NSMutableString alloc] init];
NSArray *textArray = @[@"AAAA", @"BBBB"];
for (NSString *string in textArray) {
[list appendFormat:@"%@/n", string.mutableCopy];
}
self.label.text = list;
self.label.numberOfLines = 0;
Para cualquier otra persona que pueda tener problemas con sizeWithFont:constrainedToSize:lineBreakMode:
o cualquiera que cambie a ios8 (el método está obsoleto a partir de ios7), ajusté mi altura usando sizeToFit
en sizeToFit
lugar.
UILabel *label;
label.numberOfLines = 0;
// Setup label with desired settings
...
[label sizeToFit];
label.frame = CGRectMake(label.frame.origin.x, // Or use any desired origin
label.frame.origin.y,
label.frame.size.width, // Or use any desired width
label.frame.size.height);
Si configura las propiedades de UILable de Plain a Attributed ... UILabel mantendrá el texto multilínea sin importar cuántos párrafos a lo largo de la altura y el ancho de UILabel se ajusten para ajustarse al área de pantalla en la que desea mostrar el texto.
Si lees una cadena de un archivo XML, el salto de línea /n
en esta cadena no funcionará en el texto de UILabel
. El /n
no se analiza a un salto de línea.
Aquí hay un pequeño truco para resolver este problema:
// correct next line /n in string from XML file
NSString *myNewLineStr = @"/n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"//n" withString:myNewLineStr];
myLabel.text = myLabelText;
Por lo tanto, debe reemplazar la parte /n
analizar en su cadena por una /n
analizada en una NSString
codificada.
Aquí están mis otras configuraciones de etiqueta:
myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor];
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];
myLabel.textAlignment = UITextAlignmentCenter;
Lo más importante es establecer numberOfLines
en 0
(= número ilimitado de líneas en la etiqueta).
¿No tiene idea de por qué Apple ha elegido no analizar /n
en cadenas leídas de XML?
Espero que esto ayude.
Si usa una UILabel
, debe recordar que la configuración predeterminada es 1 línea, por lo que no importa cuántos saltos agregue ( /n
o /r
), debe asegurarse de que esté configurado en más de una línea para que Se podría permitir añadir más líneas.
Una alternativa es utilizar UITextView
que está realmente diseñado para multilíneas.
Puede lograrlo fácilmente en la sección de atributos XCode de UILabel, vea la captura de pantalla:
Simplemente utilizando label.numberOfLines = 0;
Solo hazlo asi
NSString * strCheck = @"A/nB";
strCheck = [strCheck stringByReplacingOccurrencesOfString:@"//n" withString:@"/n"]; //This is to prevent for fetching string from plist or data structure
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text = strCheck;
Use /n
como está usando en su cadena.
Establezca numberOfLines en 0 para permitir cualquier número de líneas.
label.numberOfLines = 0;
Actualice el marco de la etiqueta para que coincida con el tamaño del texto usando sizeWithFont:
Si no lo hace, su texto se centrará verticalmente o se cortará.
UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
constrainedToSize:label.frame.size
lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
label.frame.origin.x, label.frame.origin.y,
label.frame.size.width, labelSize.height);
Actualización: Reemplazo para desaprobado
sizeWithFont:constrainedToSize:lineBreakMode:
Referencia, Reemplazo para tamaño desaprobado ConFont: en iOS 7?
CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];
label.frame = CGRectMake(
label.frame.origin.x, label.frame.origin.y,
label.frame.size.width, labelSize.height);
Use la opción de retorno cuando escriba en el cuadro pequeño en Interface Builder para insertar un salto de línea (/ n). En los atributos de la etiqueta de Interface Builder, defina # Líneas = 0.
Seleccione la etiqueta y luego cambie la propiedad de Líneas a 0 como en la imagen anterior, y luego use / n en su cadena para el salto de línea.
UILabel
establecer la propiedad numberOfLines
en la UILabel
. El valor predeterminado es 1 , si lo establece en 0 , eliminará todos los límites.
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"/n"];
textLabel.text = @"/nAAAAA/nBBBBB/nCCCCC";
textLabel.numberOfLines = 3; //As you want - AAAAA/nBBBBB/nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);