wake-up-neo.net

Mehrere Textzeilen in UILabel

Gibt es eine Möglichkeit, mehrere Textzeilen in UILabel wie in UITextView zu verwenden, oder sollte ich stattdessen die zweite verwenden?

416

Ich habe eine Lösung gefunden.

Man muss nur den folgenden Code hinzufügen:

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

Alte Antwort wiederhergestellt (als Referenz und Entwickler, die iOS unter 6.0 unterstützen möchten):

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

Nebenbei: Beide Enumerationswerte ergeben ohnehin 0.

759

In IB die Anzahl der Zeilen auf 0 setzen (erlaubt unbegrenzte Zeilen)

Verwenden Sie bei der Eingabe in das Textfeld mit IB "alt-return", um eine Rückgabe einzufügen und zur nächsten Zeile zu wechseln (oder Sie können Text einfügen, der bereits durch Zeilen getrennt ist).

Die beste Lösung, die ich gefunden habe (zu einem ansonsten frustrierenden Problem, das im Rahmen hätte gelöst werden müssen) ist ähnlich wie bei Vaychick.

Setzen Sie einfach die Anzahl der Zeilen entweder in IB oder im Code auf 0

myLabel.numberOfLines = 0;

Dadurch werden die benötigten Zeilen angezeigt, das Etikett wird jedoch horizontal so zentriert, dass eine Beschriftung von 1 Zeile und 3 Zeilen horizontal ausgerichtet ist. Um das Add zu beheben:

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

Verwenden Sie dies, um in UILabel mehrere Textzeilen zu haben:

textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;

Schnell:

textLabel.lineBreakMode = .byWordWrapping
textLabel.numberOfLines = 0
31
Abi
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
20

Wenn Sie das benutzen müssen: 

myLabel.numberOfLines = 0;

eigenschaft können Sie auch einen Standard-Zeilenumbruch ("\n") verwenden, um eine neue Zeile zu erzwingen.

15

Sie können \r verwenden, um zur nächsten Zeile zu gelangen, während Sie UILabel mit NSString auffüllen.

UILabel * label;


label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];
13
prajul

Lass uns das versuchen

textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated     
textLabel.numberOfLines = 0;                          
12
user40910
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

Die obige Lösung funktioniert in meinem Fall nicht. Ich mache so:

- (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);

    //...
}
10
bartolo-otrit

Story-Borad verwenden: Wählen Sie das Etikett aus, um die Anzahl der Zeilen auf Null zu setzen ...... Oder lesen Sie diese

 enter image description here

8
Vijay Sharma
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;

Aus einigen Gründen ist es bei iOS 6 nicht sicher, warum. Versuchte es mit und ohne zugeschriebenen Text. Irgendwelche Vorschläge.

6
Rajashekar

Swift 3
Wenn Sie die Anzahl der Zeilen für dynamische Textinformationen auf Null setzen, ist dies für das Ändern von Text nützlich.

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

enter image description here

6
Krunal
Try using this code:

lblName.numberOfLines = 0;
[lblName sizeToFit];
5
Mubin Shaikh

sie sollten dies versuchen:

-(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;
}
3
Pritesh

Diese Dinge haben mir geholfen 

Ändern Sie diese Eigenschaften von UILabel 

label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;

Während der Eingabe String verwenden Sie\n, um verschiedene Wörter in verschiedenen Zeilen anzuzeigen.

Beispiel:

 NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
3
iPhoneDeveloper
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
2
Gaurav Gilani

Das kannst du auch über das Storyboard machen: 

  1. Wählen Sie das Label im View Controller aus
  2. Erhöhen Sie im Attributinspektor den Wert der Option Linie (Drücken Sie Alt + Befehlstaste + 4, um den Attributspektor anzuzeigen.
  3. Doppelklicken Sie auf das Label im Ansichts-Controller und schreiben oder fügen Sie Ihren Text ein
  4. Ändern Sie die Größe der Beschriftung und/oder erhöhen Sie die Schriftgröße, sodass der gesamte Text angezeigt werden kann
2
OsLivon

Ich stimme mit Jarred Olson überein, NSLineBreakByWordWrapping ist default . Ich fügte Eigenschaft sizeToFit hinzu, wie der Guide von Gurumoorthy Arumugam, um das Problem zu beheben.

Wenn Sie möchten, dass sich die Schriftart in Ihrem Etikett an die Grenzen des Etiketts anpasst. Sie können verwenden:

textLabel.adjustsFontSizeToFitWidth = YES;

Danke euch allen.

2
ryan tran
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
1
Gaurav Gilani

Legen Sie unten entweder im Code oder im Storyboard selbst fest

Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;

vergessen Sie nicht, die Beschriftungen links, rechts, oben und unten für die Beschriftung festzulegen, da dies sonst nicht funktioniert.

1
Ankit garg

Methode 1:

extension UILabel {
    func lblFunction() {
        numberOfLines = 0
        lineBreakMode = .byWordWrapping//If you want Word wraping
        lineBreakMode = .byCharWrapping//If you want character wraping
    }
}

Jetzt einfach so anrufen 

myLbl.lblFunction()//Replace your label name 

Methode 2:

Programmatisch

yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping//If you want Word wraping
yourLabel.lineBreakMode = .byCharWrapping//If you want character wraping

Methode 3:

Durch das Storyboard

Um mehrere Zeilen mit dem Wert 0 (Null) anzuzeigen, werden auf Ihrem Etikett mehr als eine Zeile angezeigt.

Wenn Sie n Zeilen anzeigen möchten, setzen Sie n.

Siehe unterer Bildschirm.

 enter image description here

Wenn Sie die minimale Schriftgröße für das Etikett festlegen möchten Klicken Sie auf die Option Autoshrink und minimale Schriftgröße auswählen

Siehe folgende Bildschirme

 enter image description here

Hier stellen Sie die minimale Schriftgröße ein

EX: 9 (In diesem Bild)

Wenn Ihr Label zu diesem Zeitpunkt mehr Text erhält, wird der Text auf 9 verkleinert

 enter image description here

1
iOS

Bereits beantwortet, aber Sie können es auch manuell im Storyboard tun. Im Attribut-Inspektor für das Label können Sie Zeilenumbrüche in Zeilenumbruch (oder Zeichenumbruch) ändern.

1
Fleija

In dieser Funktion übergeben Sie die Zeichenfolge, die Sie in label zuweisen möchten, und geben Sie anstelle von self.activityFont die Schriftgröße und anstelle von 235 die Etikettenbreite an. Jetzt erhalten Sie die Etikettenhöhe entsprechend Ihrer Zeichenfolge. 

-(float)calculateLabelStringHeight:(NSString *)answer
{
    CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
    return textRect.size.height;

}
1
Nripendra singh

Schnell 4:

label.lineBreakMode = .byWordWrapping

label.numberOfLines = 0

label.translatesAutoresizingMaskIntoConstraints = false

label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 
0
Sumona Salma

In C # hat das für mich in UITableViewCell funktioniert.

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

Ich denke, der Punkt hier ist:

            myLabel.TextAlignment = UITextAlignment.Left;
            myLabel.LineBreakMode = UILineBreakMode.WordWrap;
            myLabel.MinimumScaleFactor = 1;
            myLabel.AdjustsFontSizeToFitWidth = true;
0
A.G