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?
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.
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.
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
Sie müssen die Eigenschaft numberOfLines
für UILabel
festlegen. Der Standardwert ist 1, wenn Sie ihn auf einstellen, werden alle Grenzwerte entfernt.
Wichtig zu beachten, es ist \n
(Backslash) statt /n
.
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"
}
// 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];
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;
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:
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;
Nur mit label.numberOfLines = 0;
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.
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
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;
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);
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.
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;