Frage

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

War es hilfreich?

Lösung

Ich fand eine Lösung.

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;  

Wiederherstellte alte Antwort (als Referenz und Entwickler bereit, iOS unter 6.0 zu unterstützen):

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

Nebenbei: Beide Enumwerte geben an 0 ohnehin.

Andere Tipps

Stellen Sie in IB die Anzahl der Zeilen auf 0 fest (erlaubt unbegrenzte Zeilen)

Verwenden Sie beim Eingeben in das Textfeld mit IB "Alt-Return", um eine Rückgabe einzufügen und in die nächste Zeile zu gehen (oder Sie können in den bereits durch Zeilen getrennten Text kopieren).

Die beste Lösung, die ich gefunden habe (zu einem ansonsten frustrierenden Problem, das im Rahmen hätte gelöst werden sollen), ähnelt der von Vaychick.

Stellen Sie einfach die Anzahl der Zeilen auf 0 in IB oder Code ein

myLabel.numberOfLines = 0;

Dadurch werden die benötigten Linien angezeigt, aber das Etikett so neu positionieren, damit ihre zentrierte horizontal (so dass eine 1 -Linie- und 3 -Zeilen -Etikette in ihrer horizontalen Position ausgerichtet ist). Um dieses Hinzufügen 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;

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

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

Schnell:

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

Wenn Sie das verwenden müssen:

myLabel.numberOfLines = 0;

Eigenschaft Sie können auch einen Standard -Linienpause verwenden ("\n"), im Code, um eine neue Zeile zu erzwingen.

Sie können verwenden \r in die nächste Zeile gehen, während sie das füllen UILabel Verwendung NSString.

UILabel * label;


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

Lass uns das versuchen

textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated     
textLabel.numberOfLines = 0;                          
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);

    //...
}

Verwenden Sie Story Borad: Wählen Sie die Beschriftung aus, um die Anzahl der Zeilen auf Null zu setzen ......Oder verweisen Sie dies

enter image description here

Swift 3
Setzen Sie die Anzahl der Zeilen Null für dynamische Textinformationen. Es ist nützlich für unterschiedliche Text.

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

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 funktioniert es für mich in iOS 6 nicht sicher warum. Versuchte es mit und ohne zugeschriebenen Text. Irgendwelche Vorschläge.

Versuchen Sie dies:

lblName.numberOfLines = 0;
[lblName sizeToFit];

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

Diese Dinge haben mir geholfen

Ändern Sie diese Eigenschaften von Uilabel

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

Und während Sie die Eingabezeichenfolge geben, 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" ;
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];

Sie können das auch über das Storyboard tun:

  1. Wählen Sie die Beschriftung im Ansichtsregler aus
  2. Erhöhen Sie im Attributinspektor den Wert der Linienoption (drücken Sie Alt+CMD+4, um Attribute Inspector anzuzeigen).
  3. Doppelklicken Sie auf das Etikett im Ansichtsregler und schreiben oder fügen Sie Ihren Text ein oder fügen Sie sie ein
  4. Gröze die Größe des Etiketts und/oder erhöhen Sie die Schriftgröße, damit der gesamte Text angezeigt werden kann

Methode 1:

extension UILabel {//Write this extension after close brackets of your class
    func lblFunction() {
        numberOfLines = 0
        lineBreakMode = .byWordWrapping//If you want word wraping
        //OR
        lineBreakMode = .byCharWrapping//If you want character wraping
    }
}

Rufen Sie jetzt einfach so an

myLbl.lblFunction()//Replace your label name 

EX:

Import UIKit

class MyClassName: UIViewController {//For example this is your class. 

    override func viewDidLoad() {
    super.viewDidLoad()

        myLbl.lblFunction()//Replace your label name 

    }

}//After close of your class write this extension.

extension UILabel {//Write this extension after close brackets of your class
    func lblFunction() {
        numberOfLines = 0
        lineBreakMode = .byWordWrapping//If you want word wraping
        //OR
        lineBreakMode = .byCharWrapping//If you want character wraping
    }
}

Methode 2:

Programmatisch

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

Methode 3:

Durch Story Board

Um mehrere Zeilen festzulegen, die 0 (Null) festgelegt sind, werden mehr als eine Zeile in Ihrem Etikett angezeigt.

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

Siehe unten Bildschirm.

enter image description here

Wenn Sie die minimale Schriftgröße für die Beschriftung festlegen möchten, klicken Sie auf Autoshrink und wählen Sie die Option Mindestschriftengröße

Siehe folgende Bildschirme

enter image description here

Hier setzen Sie die minimale Schriftgröße

Ex: 9 (in diesem Bild)

Wenn Ihr Etikett zu diesem Zeitpunkt mehr Text erhalten

enter image description here

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

Bereits beantwortet, aber Sie können es auch manuell im Storyboard tun. Unter Attributen Inspector für das Etikett können Sie Zeilenumbrüche in Word Wrap (oder Zeichenverpackung) ändern.

In dieser Funktion Pass -Zeichenfolge, die Sie anstelle von Selbst in der Beschriftung und Pass -Schriftgröße zuweisen möchten. Aktivitäts- und Pass -Etikettenbreite anstelle von 235, erhalten Sie jetzt die Etikettenhöhe gemäß Ihrer Saite. Es wird gut funktionieren.

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

}

Setzen Sie unten entweder in Code oder in Storyboard selbst

Label.lineBreakmode = nSlineBreakByWordWrapping; Label.numberoflines = 0;

Und bitte vergessen Sie nicht, links, rechts, obere und untere Einschränkungen für das Label zu setzen, da es sonst nicht funktioniert.

Swift 4:

label.lineBreakMode = .byWordWrapping

label.numberOfLines = 0

label.translatesAutoresizingMaskIntoConstraints = false

label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 

Auf C#funktionierte dies für mich in UitableViewCell.

        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;

Dieser Code kehrt die Größenhöhe gemäß Text zurück

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
 {
    CGFloat result = font.pointSize+4;
    if (text) 
{
        CGSize size;

        CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        size = CGSizeMake(frame.size.width, frame.size.height+1);
        result = MAX(size.height, result); //At least one row
    }
    return result;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top