web-dev-qa-db-de.com

Wie füge ich einen Zeilenumbruch für UILabel hinzu?

Mal sehen, dass ich einen String so aussehe:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

Wie mache ich es so, dass das UILabel die Meldung so anzeigt

AAAAA
BBBBB
CCCCC

Ich glaube nicht \n wird von UILabel erkannt. Kann ich also irgendetwas in NSString einfügen, damit UILabel weiß, dass es dort einen Zeilenumbruch verursachen muss?

250
Thang Pham

enter image description here

Verwenden Sie die Option-Return-Taste, wenn Sie in das kleine Feld in Interface Builder einen Zeilenvorschub einfügen (\ n). Legen Sie in den Label-Attributen des Interface Builder # Lines = 0 fest.

Wählen Sie die Beschriftung aus und ändern Sie die Eigenschaft Lines wie im obigen Bild in 0. Verwenden Sie dann\n in Ihrer Zeichenfolge für den Zeilenumbruch.

264
Marco

Wenn Sie eine Zeichenfolge aus einer XML-Datei lesen, funktioniert der Zeilenumbruch \n In dieser Zeichenfolge im Text UILabel nicht. Das \n Wird nicht zu einem Zeilenumbruch analysiert.

Hier ist ein kleiner Trick, um dieses Problem zu lösen:

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

Sie müssen also den nicht analysierten Teil \n In Ihrem String durch einen analysierten \n In einem fest codierten NSString ersetzen.

Hier sind meine anderen Etiketteneinstellungen:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

Am wichtigsten ist es, numberOfLines auf 0 Zu setzen (= unbegrenzte Anzahl von Zeilen in label).

Keine Ahnung, warum Apple hat entschieden, \n Nicht in Strings zu analysieren, die aus XML gelesen wurden?

Hoffe das hilft.

131
Al-Noor Ladhani

Im Interface Builder können Sie verwenden Ctrl + Enter einführen /n an die gewünschte Position. Auf diese Weise könnte die folgende Situation implementiert werden

aaa
aaaaaaa

106
kuokuo321

Sie müssen die Eigenschaft numberOfLines für UILabel festlegen. Der Standardwert ist 1, wenn Sie ihn auf einstellen, werden alle Grenzwerte entfernt.

25
Dan

Wichtig zu beachten, es ist \n (Backslash) statt /n.

22
AndyOng

In Swift 2.2,> iOS 8

Ich habe im Storyboard unter Attributinspektor Zeilen = 0 festgelegt und einen Verweis-Ausgang mit dem Etikett verknüpft. Dann verwenden Sie in der Steuerung wie folgt:

 @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"
 }
9
CodeOverRide

// Vergiss nicht, numberOfLines auf Null zu setzen

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];
6
Pankaj Chauhan

Mach es einfach so

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;
5

Wenn Sie ein UILabel verwenden, müssen Sie daran denken, dass die Standardeinstellung 1 Zeile ist. Es spielt also keine Rolle, wie viele Pausen Sie hinzufügen (\n oder \r) müssen Sie sicherstellen, dass es auf mehr als eine Zeile festgelegt ist, damit möglicherweise mehr Zeilen angehängt werden können.

Eine Alternative ist die Verwendung von UITextView, das eigentlich für Mehrfachleitungen gedacht ist.

Sie können dies einfach im XCode-Attributbereich des UILabel erreichen, siehe Screenshot:

enter image description here

3
meda

Unter Xcode 6 können Sie nur\n verwenden, auch wenn Sie einen Zeilenumbruch verwenden. Es wird klappen. Also zum Beispiel:

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;
3
Roi

Nur mit label.numberOfLines = 0;

2
Fry

In meinem Fall hat auch\n nicht funktioniert. Ich habe das Problem behoben, indem ich die Zeilenzahl auf 0 gesetzt und den Text mit einer neuen Zeile kopiert und eingefügt habe, z. B. anstelle von Hello\n World, das ich eingefügt habe

Hallo

Welt

im Interface Builder.

2
Ranjithkumar
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
1
user3182143
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
0
Grigori A.

Ich halte es für falsch, die Etikettenrahmengrößen zu ändern, insbesondere wenn Autolayout verwendet wird. Die Verwendung der appendFormat-Methode erscheint angemessener. Hier ist mein Beispiel:

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;
0
tanya

Für alle anderen, die möglicherweise Probleme mit sizeWithFont:constrainedToSize:lineBreakMode: Haben oder zu ios8 wechseln (die Methode ist ab ios7 veraltet), habe ich stattdessen die Höhe mit sizeToFit angepasst.

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);
0
user3842937

Wenn Sie die UILable-Eigenschaften von "Normal" auf "Zugeschrieben" setzen ... enthält das UILabel mehrzeiligen Text, unabhängig davon, wie viele Absätze es enthält, da Höhe und Breite Ihres UILabels auf den Bildschirmbereich eingestellt sind, in dem der Text angezeigt werden soll.

0
BrainyMonkey

Ich habe das gleiche Problem und hier ist, wie ich das Problem gelöst habe. Hoffe das wird jemandem weiterhelfen.

// Swift 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

// Ziel c

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// C # (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  
0
Suraj Sonawane