iphone - Los saltos de línea no funcionan en UILabel
formatting (3)
Tuve problemas con la respuesta de Scot Gustafson anterior en XCode 4.3
Pruebe esto en su lugar:
unichar chr[1] = {''/n''};
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1];
Luego usa en tu código algo como esto:
self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR];
Estoy cargando un texto de ayuda de un plist y mostrando el mismo en la forma de UILabels alojado en un UIScrollView. Parte del código sigue:
UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease];
sectionDetailLabel.backgroundColor = [UIColor clearColor];
sectionDetailLabel.numberOfLines = 0;
sectionDetailLabel.font = [UIFont systemFontOfSize:12];
sectionDetailLabel.textColor = [UIColor blackColor];
sectionDetailLabel.textAlignment = UITextAlignmentLeft;
sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap;
[baseScrollView addSubview:sectionDetailLabel];
[sectionDetailLabel setText:myStringForThisSection];
[sectionDetailLabel sizeToFit];
Si bien cualquier texto "largo" se va a engarzar en varias líneas correctamente, no puedo insertar manualmente ningún salto de línea utilizando los caracteres ''/ n'' de nueva línea en ''myStringForThisSection''. Solo veo los caracteres ''/' e ''n'' impresos en UILabel donde quiera que sea el salto de línea.
Lo busqué y el consenso general parecía ser que establecer numberOfLines en 0, establecer lineBreakMode en un valor válido e invocar sizeToFit (o establecer el marco de UILabel basado en sizeWithFont :) debería hacerlo. Todo lo que parece que estoy haciendo en el código anterior, y funciona perfectamente al ajustar largas cadenas de longitud desconocida en múltiples líneas en el UILabel. Entonces, ¿qué podría faltar aquí?
Nota: todas las variables utilizadas - baseScrollView, myStringForThisSection y myOriginForThisSection - se cargaron antes de que el código anterior comenzara a ejecutarse, y funcionan bien.
No pude conseguir que la solución de Scott & DoctorG funcionara (aunque no lo pasé demasiado tiempo intentando), pero esta es la solución simple que funciona para mí cuando estoy extrayendo texto escapado de un archivo xml.
Dentro de mi clase de función de cadena, defino:
+(NSString)escapeXml:(NSString*)string {
return [string stringByReplacingOccurrencesOfString:@"//n" withString:@"/n"];
}
UILabel no interpreta la secuencia de escape / n. Puede insertar el carácter real que representa el Retorno de carro y / o el Avance de línea. Haga un char para sostener su nueva línea y luego insértela.
unichar newLine = ''/n'';
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1];
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR];
Siempre que su myStringForThisSection sea mutable, eso debería hacerlo.