Suche…


Einführung

Die UILabel-Klasse implementiert eine schreibgeschützte Textansicht. Sie können diese Klasse verwenden, um eine oder mehrere Zeilen statischen Textes zu zeichnen, z. B. solche, mit denen Sie andere Teile Ihrer Benutzeroberfläche identifizieren können. Die UILabel-Basisklasse unterstützt sowohl die einfache als auch die komplexe Gestaltung des Etikettentextes. Sie können auch Aspekte des Erscheinungsbilds steuern, z. B. ob die Beschriftung einen Schatten verwendet oder mit einer Hervorhebung zeichnet. Bei Bedarf können Sie das Erscheinungsbild Ihres Textes durch Unterklassen weiter anpassen.

Syntax

  • UILabel.numberOfLines: Int // Die maximale Anzahl von Zeilen für das Label ermitteln oder festlegen. 0 ist unbegrenzt
  • UILabel.text: Zeichenfolge? // Erhalte oder setze den Text, den das Label anzeigt
  • UILabel.textColor: UIColor! // Die Farbe des Texts auf dem Etikett abrufen oder festlegen
  • UILabel.tintColor: UIColor! // Die Farbtonfarbe des Etiketts abrufen oder festlegen
  • UILabel.attributedText: NSAttributedString? // den attributierten Text der Beschriftung abrufen oder festlegen
  • UILabel.font: UIFont! // Die Schrift des Textes auf dem Etikett abrufen oder festlegen
  • UILabel.textAlignment: NSTextAlignment // Ermittelt oder setzt die Ausrichtung des Textes

Bemerkungen

UILabels sind Ansichten, mit denen eine oder mehrere Textzeilen angezeigt werden können. Es enthält mehrere Möglichkeiten zum Stilisieren von Text, z. B. Schatten, Textfarben und Schriftarten.

UILabels können auch Attributed Strings anzeigen, dh Text + Inline-Markup, um Stile auf Teile des Textes anzuwenden.

UILabel entspricht nicht dem UIAppearance-Protokoll. Daher können Sie keine UIAppearance-Proxy-Methoden verwenden, um das Erscheinungsbild von UILabels anzupassen. Sehen Sie diese Diskussion für mehr.

Apple-Entwicklerreferenz hier

Text in einem vorhandenen Etikett ändern

Ändern Sie den Text eines vorhandenen UILabel können durch den Zugriff auf und die Änderung der getan werden text - Eigenschaft des UILabel . Dies kann direkt mit String Literalen oder indirekt mit Variablen erfolgen.

Festlegen des Textes mit String Literalen

Schnell

label.text = "the new text"

Ziel c

// Dot Notation
label.text = @"the new text";

// Message Pattern
[label setText:@"the new text"];

Den Text mit einer Variablen einstellen

Schnell

let stringVar = "basic String var"
label.text = stringVar

Ziel c

NSString * stringVar = @"basic String var";

// Dot Notation
label.text = stringVar;

// Message Pattern
[label setText: stringVar];

Textfarbe

Sie können die Eigenschaft textColor der Beschriftung textColor , um eine textColor auf den gesamten Text der Beschriftung anzuwenden.

Schnell

label.textColor = UIColor.redColor()
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

Swift 3

label.textColor = UIColor.red
label.textColor = UIColor(red: 64.0/255.0, green: 88.0/255.0, blue: 41.0/225.0, alpha: 1)

Ziel c

label.textColor = [UIColor redColor];
label.textColor = [UIColor colorWithRed:64.0f/255.0f green:88.0f/255.0f blue:41.0f/255.0f alpha:1.0f];

Textfarbe auf einen Teil des Textes anwenden

Sie können auch die NSAttributedString (oder andere Attribute) von Textabschnitten mithilfe von NSAttributedString :

Ziel c

attributedString = [[NSMutableAttributedString alloc] initWithString:@"The grass is green; the sky is blue."];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(13, 5)];
[attributedString addAttribute: NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(31, 4)];
label.attributedText = attributesString;

Schnell

let attributedString = NSMutableAttributedString(string: "The grass is green; the sky is blue.")
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green(), range: NSRange(location: 13, length: 5))
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue(), range: NSRange(location: 31, length: 4))
label.attributedText = attributedString

Textausrichtung

Schnell

label.textAlignment = NSTextAlignment.left 
//or the shorter
label.textAlignment = .left 

Jeder Wert in der NSTextAlignment ist gültig: .left , .center , .right , .justified , .natural

Ziel c

label.textAlignment = NSTextAlignmentLeft;

Jeder Wert in der NSTextAlignment ist gültig: NSTextAlignmentLeft , NSTextAlignmentCenter , NSTextAlignmentRight , NSTextAlignmentJustified , NSTextAlignmentNatural

Die vertikale Ausrichtung in UILabel wird nicht UILabel unterstützt: Text in UILabel vertikal nach oben ausrichten

Erstellen Sie ein UILabel

Mit einem Rahmen

Wenn Sie die genauen Abmessungen kennen, die Sie für Ihr Etikett festlegen möchten, können Sie ein UILabel mit einem CGRect Rahmen initialisieren.

Schnell

let frame = CGRect(x: 0, y: 0, width: 200, height: 21)
let label = UILabel(frame: frame)
view.addSubview(label)

Ziel c

CGRect frame = CGRectMake(0, 0, 200, 21);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
[view addSubview:label];

Mit automatischem Layout

Sie können Einschränkungen für ein UILabel wenn iOS seinen Frame zur Laufzeit dynamisch berechnen soll.

Schnell

let label = UILabel()
label.backgroundColor = .red
label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)

NSLayoutConstraint.activate([
    //stick the top of the label to the top of its superview:
    label.topAnchor.constraint(equalTo: view.topAnchor)

    //stick the left of the label to the left of its superview
    //if the alphabet is left-to-right, or to the right of its 
    //superview if the alphabet is right-to-left:
    label.leadingAnchor.constraint(equalTo: view.leadingAnchor)

    //stick the label's bottom to the bottom of its superview:
    label.bottomAnchor.constraint(equalTo: view.bottomAnchor)

    //the label's width should be equal to 100 points:
    label.widthAnchor.constraint(equalToConstant: 100)
])

Ziel c

UILabel *label = [[UILabel alloc] init];

Mit Objective-c + Visual Format Language (VFL)

  UILabel *label = [UILabel new];
  label.translatesAutoresizingMaskIntoConstraints = NO;
  [self.view addSubview label];
  // add horizontal constraints with 5 left and right padding from the leading and trailing

  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelName]-5-|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]];
  // vertical constraints that will use the height of the superView with no padding on top and bottom
  [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[labelName]|"
                                                                    options:0
                                                                    metrics:nil
                                                                      views:@{@"labelName":label}]]

Die VFL-Dokumentation finden Sie hier

Stellen Sie nach dem Erstellen des Etiketts sicher, dass Sie die Abmessungen über das automatische Layout festlegen. Xcode zeigt Fehler an, wenn dies nicht ordnungsgemäß durchgeführt wird.

Mit dem Interface Builder

Sie können den Interface Builder auch verwenden, um der Storyboard oder .xib Datei ein UILabel hinzuzufügen, indem Sie ein Label aus dem .xib ziehen und in eine Ansicht in der Leinwand ziehen:

Screenshot vom Interface Builder

Anstatt einen Frame (Position und Größe) für ein UILabel programmgesteuert .xib können Sie mit einem Storyboard oder einer .xib mithilfe des automatischen Layouts Einschränkungen für das Steuerelement hinzufügen.

Um auf dieses aus storyboard oder xib erstellte Label xib erstellen Sie ein IBOutlet dieses Labels.

Verknüpfung zwischen Interface Builder und View Controller

Nachdem Sie ein UILabel zu Ihrem Storyboard oder der .xib Datei hinzugefügt haben, können Sie es mit Ihrem Code verknüpfen, indem Sie die UILabel ViewController Control ⌃ drücken und dann die Maus zwischen das UILabel zu Ihrem ViewController , oder Sie können in den Code ziehen, während Sie mit der rechten Maustaste darauf klicken haben die gleiche Wirkung.

Geben Sie hier die Bildbeschreibung ein

Im Eigenschaftendialogfeld können Sie den Namen von UILabel und als strong oder weak UILabel . Weitere Informationen zu strong und weak finden Sie hier .

Die andere Möglichkeit besteht darin, den Ausgang wie folgt programmgesteuert zu machen:

Schnell

@IBOutlet weak var nameLabel : UILabel!

Ziel c

@property (nonatomic, weak) IBOutlet UILabel *nameLabel;

Schriftart einstellen

Schnell

let label = UILabel()

Ziel c

UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init

Ändern Sie die Größe der Standardschriftart

Schnell

label.font = UIFont.systemFontOfSize(17)

Swift 3

label.font = UIFont.systemFont(ofSize: 17)

Ziel c

label.font = [UIFont systemFontOfSize:17];

Verwenden Sie eine bestimmte Schriftstärke

iOS 8.2

Schnell

label.font = UIFont.systemFontOfSize(17, weight: UIFontWeightBold)

Swift3

label.font = UIFont.systemFont(ofSize: 17, weight: UIFontWeightBold)

Ziel c

label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
iOS 8.2

Schnell

label.font = UIFont.boldSystemFontOfSize(17)

Swift3

label.font = UIFont.boldSystemFont(ofSize: 17)

Ziel c

label.font = [UIFont boldSystemFontOfSize:17];

Verwenden Sie einen dynamischen Textstil.

Die Schriftart und die Punktgröße basieren auf der bevorzugten Lesegröße des Benutzers.

Schnell

label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

Swift 3

label.font = UIFont.preferredFont(forTextStyle: .body)

Ziel c

label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

Verwenden Sie eine andere Schriftart

Schnell

label.font = UIFont(name: "Avenir", size: 15)

Ziel c

label.font = [UIFont fontWithName:@"Avenir" size:15];

Überschreibt die Schriftgröße

Sie können die Schriftgröße ohne Kenntnis der Schriftfamilie UILabel die font UILabel des UILabel .

Schnell

label.font = label.font.fontWithSize(15)

Swift 3

label.font = label.font.withSize(15)

Ziel c

label.font = [label.font fontWithSize:15];

Verwenden Sie Custom Font Swift

Siehe diesen Link

Anzahl der Zeilen

Wenn Sie eine Beschriftung erstellen und festlegen, dass der Text mehr als eine einzelne Zeile ist, die angezeigt werden kann, wird sie abgeschnitten und es wird nur eine Textzeile angezeigt, die mit drei Punkten endet (...). Dies liegt daran, dass eine Eigenschaft namens numberOfLines auf 1 festgelegt ist und daher nur eine Zeile angezeigt wird. Es ist ein häufiger Fehler im Umgang mit UILabel , und viele Leute halten es für einen Fehler oder sie verwenden mehr als ein Label, um mehr als nur eine Textzeile UILabel jedoch nur diese Eigenschaft bearbeiten, können Sie einem UILabel mitteilen akzeptieren Sie die angegebene Anzahl von Zeilen. Wenn diese Eigenschaft beispielsweise auf 5 eingestellt ist, kann das Etikett 1, 2, 3, 4 oder 5 Datenzeilen anzeigen.

Den Wert programmgesteuert einstellen

Um diese Eigenschaft festzulegen, weisen Sie ihr einfach eine neue Ganzzahl zu:

Schnell

label.numberOfLines = 2

Ziel c

label.numberOfLines = 2;

Hinweis

Es ist möglich, diese Eigenschaft auf 0 zu setzen. Dies bedeutet jedoch nicht, dass keine Zeilen akzeptiert werden, sondern dass die Beschriftung so viele Zeilen enthalten kann, wie sie benötigt werden (auch als "Infinity" bezeichnet):

Schnell

label.numberOfLines = 0

Ziel c

label.numberOfLines = 0;

Hinweis

Wenn das Etikett eine Höhenbeschränkung hat, wird die Einschränkung beachtet. In diesem Fall label.numberOfLines = 0 möglicherweise nicht wie erwartet.

Hinweis

Für komplexeren mehrzeiligen Text ist UITextView möglicherweise besser geeignet. *

Wert im Interface Builder einstellen

Anstatt numberOfLines programmgesteuert numberOfLines , können Sie ein Storyboard oder eine .xib und die numberOfLines Eigenschaft numberOfLines . Auf diese Weise erzielen wir dieselben Ergebnisse wie der obige Code.

Wie unten:

Geben Sie hier die Bildbeschreibung ein

Größe passend

Angenommen, Sie haben ein UILabel in Ihrem storyboard und Sie haben dafür ein IBOutlet in ViewController.swift / ViewController.m und als labelOne .

Um die Änderungen leicht sichtbar zu machen, ändern Sie backgroundColor und textColor von labelOne in der viewDidLoad Methode:

Die Funktion sizeToFit wird verwendet, wenn Sie die Größe eines Labels basierend auf dem darin gespeicherten Inhalt automatisch ändern möchten.

Schnell

labelOne.backgroundColor = UIColor.blueColor()
labelOne.textColor = UIColor.whiteColor()
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

Swift 3

labelOne.backgroundColor = UIColor.blue
labelOne.textColor = UIColor.white
labelOne.text = "Hello, World!"
labelOne.sizeToFit()

Ziel c

labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];

Die Ausgabe für den obigen Code lautet:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen, ändert sich nichts, da der Text in labelOne perfekt passt. sizeToFit ändert nur den Rahmen des Labels.

Lassen Sie uns den Text etwas länger ändern:

labelOne.text = "Hello, World! I’m glad to be alive!"

Nun sieht labelOne so aus:

Geben Sie hier die Bildbeschreibung ein

Selbst sizeToFit aufrufen, ändert sich nichts. Dies ist darauf zurückzuführen, dass die vom UILabel angezeigten numberOfLines standardmäßig auf 1 gesetzt ist. Lassen Sie sie im Storyboard auf Null setzen:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie diesmal die App ausführen, wird labelOne korrekt angezeigt:

Geben Sie hier die Bildbeschreibung ein

Die numberOfLines Eigenschaft kann auch in der ViewController Datei ViewController werden:

// Objective-C
labelOne.numberOfLines = 0; 

// Swift
labelOne.numberOfLines = 0

Hintergrundfarbe

Schnell

label.backgroundColor = UIColor.redColor()

label.backgroundColor = .redColor()

Swift 3

label.backgroundColor = UIColor.red

Ziel c

label.backgroundColor = [UIColor redColor];

Fügen Sie dem Text Schatten hinzu

Schnell

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

Swift 3

label1.layer.shadowOffset = CGSize(width: 3, height: 3)
label1.layer.shadowOpacity = 0.7
label1.layer.shadowRadius = 2

Ziel c

label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;

Geben Sie hier die Bildbeschreibung ein

Variable Höhe mit Einschränkungen

Sie können ein UILabel mit dynamischer Höhe mithilfe des automatischen Layouts UILabel .

Sie müssen numberOfLines auf Null (0) setzen und eine minimale Höhe hinzufügen, indem Sie Einschränkungen mit einer Beziehung vom Typ .GreaterThanOrEqual für das Attribut .GreaterThanOrEqual .Height

iOS 6

Schnell

label.numberOfLines = 0

let heightConstraint = NSLayoutConstraint(
    item: label,
    attribute: .Height,
    relatedBy: .GreaterThanOrEqual,
    toItem: nil,
    attribute: .NotAnAttribute,
    multiplier: 0,
    constant: 20
)

label.addConstraint(heightConstraint)
iOS 9

Schnell

label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true

LineBreakMode

Code verwenden

UILabel.lineBreakMode: NSLineBreakMode

Schnell

label.lineBreakMode = .ByTruncatingTail
  • .ByWordWrapping
  • .ByCharWrapping
  • .ByClipping
  • .ByTruncatingHead
  • .ByTruncatingTail
  • .ByTruncatingMiddle

Swift 3

label.lineBreakMode = .byTruncatingTail
  • .byWordWrapping
  • .byCharWrapping
  • .byClipping
  • .byTruncatingHead
  • .byTruncatingTail
  • .byTruncatingMiddle

Ziel c

[label setLineBreakMode:NSLineBreakByTruncatingTail];
  • NSLineBreakByWordWrapping
  • NSLineBreakByCharWrapping
  • NSLineBreakByClipping
  • NSLineBreakByTruncatingHead
  • NSLineBreakByTruncatingTail
  • NSLineBreakByTruncatingMiddle

Storyboard verwenden

Dies kann auch im Attribut-Inspector eines UILabels festgelegt werden:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Konstanten

  • Zeilenumbruch - Der Zeilenumbruch erfolgt an Wortgrenzen, es sei denn, das Wort selbst passt nicht in eine einzige Zeile
  • Zeichenumbruch - Der Umbruch erfolgt vor dem ersten Zeichen, das nicht passt
  • Ausschnittslinien werden einfach nicht über den Rand des Textcontainers gezogen
  • Kopf abschneiden - Die Linie wird so angezeigt, dass das Ende in den Container passt und der fehlende Text am Anfang der Zeile durch ein Ellipsenzeichen angezeigt wird
  • Schwanz abschneiden - Die Linie wird so angezeigt, dass der Anfang in den Container passt und der fehlende Text am Ende der Zeile durch ein Ellipsenzeichen angezeigt wird
  • Mitte abschneiden - Die Linie wird so angezeigt, dass Anfang und Ende in den Container passen und der fehlende Text in der Mitte durch ein Ellipsenzeichen angezeigt wird

Content Bounds berechnen (zB für dynamische Zellenhöhen)

Ein üblicher Anwendungsfall für die Berechnung des Rahmens, den ein Label beansprucht, ist die geeignete Größenanpassung von Tabellenzellen. Die empfohlene Methode hierfür ist die Verwendung der NSString Methode boundingRectWithSize:options:attributes:context:

options nimmt String-Zeichenoptionen:

  • NSStringDrawingUsesLineFragmentOrigin sollte für Beschriftungen mit mehreren Zeilen verwendet werden
  • NSStringDrawingTruncatesLastVisibleLine sollte mit | hinzugefügt werden Operator, wenn eine maximale Anzahl von Zeilen vorhanden ist

attributes ist ein NSDictionary von Attributen, die zugeordnete Zeichenfolgen NSDictionary (vollständige Liste: Apple Docs ), aber die Faktoren, die die Höhe beeinflussen, umfassen:

  • NSFontAttributeName : Sehr wichtig, die Größe und Schriftfamilie ist ein wichtiger Teil der angezeigten Größe des Etiketts.

  • NSParagraphStyleAttributeName : Zum Anpassen der Anzeige des Texts. Dazu gehören Zeilenabstand, Textausrichtung, Schnittstil und einige andere Optionen. Wenn Sie keinen dieser Werte explizit geändert haben, sollten Sie sich nicht so viele Sorgen machen, aber es kann wichtig sein, wenn Sie einige Werte für IB ändern.

context sollte gleich nil da der primäre Anwendungsfall von NSStringDrawingContext dazu dient, die Schriftgröße an ein angegebenes NSStringDrawingContext , was bei der Berechnung einer dynamischen Höhe nicht der Fall sein sollte.

Ziel c

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    NSString *labelContent = cell.theLabel.text;
    // you may choose to get the content directly from the data source if you have done minimal customizations to the font or are comfortable with hardcoding a few values
//    NSString *labelContent = [self.dataSource objectAtIndexPath:indexPath];
    
    // value may be hardcoded if retrieved from data source
    NSFont *labelFont = [cell.theLabel font];
    
    // The NSParagraphStyle, even if you did not code any changes these values may have been altered in IB
    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment = NSTextAlignmentCenter;

    NSDictionary *attributes = @{NSFontAttributeName: labelFont,
                                 NSParagraphStyleAttributeName: paragraphStyle};

    // The width is also important to the height
    CGFloat labelWidth = CGRectGetWidth(cell.theLabel.frame);
    // If you have been hardcoding up to this point you will be able to get this value by subtracting the padding on left and right from tableView.bounds.size.width
//    CGFloat labelWidth = CGRectGetWidth(tableView.frame) - 20.0f - 20.0f;

    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;
}

Swfit 3

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var cell = tableView.cellForRow(atIndexPath: indexPath)!
    var labelContent = cell.theLabel.text
    var labelFont = cell.theLabel.font
    var paragraphStyle = NSMutableParagraphStyle()

    paragraphStyle.lineBreakMode = .byWordWrapping
    paragraphStyle.alignment = .center

    var attributes = [NSFontAttributeName: labelFont, NSParagraphStyleAttributeName: paragraphStyle]

    var labelWidth: CGFloat = cell.theLabel.frame.width

    var bodyBounds = labelContent.boundingRect(withSize: CGSize(width: width, height: CGFLOAT_MAX), options: .usesLineFragmentOrigin, attributes: attributes, context: nil)

    return bodyBounds.height + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel
}

Umgekehrt, wenn Sie eine festgelegte maximale Anzahl von Zeilen haben, müssen Sie zuerst die Höhe einer einzelnen Zeile berechnen, um sicherzustellen, dass wir keinen höheren Wert als die zulässige Größe erhalten:

    // We calculate the height of a line by omitting the NSStringDrawingUsesLineFragmentOrigin option, which will assume an infinitely wide label
    CGRect singleLineRect = [labelContent boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)
                                                 options:NSStringDrawingTruncatesLastVisibleLine
                                                 context:nil];
    CGFloat lineHeight = CGRectGetHeight(singleLineRect);
    CGFloat maxHeight = lineHeight * cell.theLabel.numberOfLines;

    // Now you can call the method appropriately
    CGRect bodyBounds = [labelContent boundingRectWithSize:CGSizeMake(width, maxHeight) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine) attributes:attributes context:nil];

    return CGRectGetHeight(bodyBounds) + heightOfObjectsOnTopOfLabel + heightOfObjectBelowLabel;

Klickbare Beschriftung

HINWEIS: In den meisten Fällen ist es besser, ein UIButton anstatt ein UILabel Sie UILabel können. Verwenden Sie dieses Beispiel nur, wenn Sie sicher sind, dass Sie aus irgendeinem Grund kein UIButton verwenden UIButton .

  1. Label erstellen
  2. Benutzerinteraktion aktivieren
  3. Fügen Sie UITapGestureRecognizer

Der Schlüssel zum Erstellen eines anklickbaren UILabel besteht darin, die Benutzerinteraktion zu ermöglichen.

Schnell

let label = UILabel()
label.userInteractionEnabled = true

let gesture = UITapGestureRecognizer(target: self, action: #selector(labelClicked(_:)))
label.addGestureRecognizer(gesture)

Ziel c

UILabel *label = [[UILabel alloc] init];
[label setUserInteractionEnabled:YES];

UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[label addGestureRecognizer:gesture];

Festlegen von "userInteractionEnabled" im Attribute-Inspector des Storyboards

Anstatt Code zu verwenden, können Sie das UILabel im Storyboard auswählen und die Option aktivieren:

Geben Sie hier die Bildbeschreibung ein

Dynamischer Etikettenrahmen aus unbekannter Textlänge

Manchmal müssen wir die Größe eines UILabels basierend auf dynamischem Inhalt ändern, bei dem die Textlänge unbekannt ist. In diesem Beispiel ist die Breite des UILabels auf 280 Punkte festgelegt, und die Höhe ist unendlich, sagen wir 9999.

Ziel c

UILabel * label = [[UILabel alloc] init];

NSString *message = @"Some dynamic text for label";

//set the text and style if any.
label.text = message;

label.numberOfLines = 0;

CGSize maximumLabelSize = CGSizeMake(280, 9999); //280:max width of label and 9999-max height of label.

// use font information from the UILabel to calculate the size
CGSize expectedLabelSize = [label sizeThatFits:maximumLabelSize];

//Deprecated in iOS 7.0
//CGSize expectedLabelSize = [message sizeWithFont:label.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

// create a frame that is filled with the UILabel frame data
CGRect newFrame = label.frame;

// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height;

// put calculated frame into UILabel frame
label.frame = newFrame;

Schnell

var message: String = "Some dynamic text for label"
//set the text and style if any.
label.text = message
label.numberOfLines = 0
var maximumLabelSize: CGSize = CGSize(width: 280, height: 9999)
var expectedLabelSize: CGSize = label.sizeThatFits(maximumLabelSize)
// create a frame that is filled with the UILabel frame data
var newFrame: CGRect = label.frame
// resizing the frame to calculated size
newFrame.size.height = expectedLabelSize.height
// put calculated frame into UILabel frame
label.frame = newFrame

Beschriftung mit Text

01. Text unterstrichen: - Single / Double Line, durchgestrichen: - Single / Double Line

Schritt 1

Wählen Sie das Label aus und ändern Sie den Label-Typ Plain in Attributed Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Schritt 2

Klicken Sie auf den Etikettentext und klicken Sie mit der rechten Maustaste

Geben Sie hier die Bildbeschreibung ein

Schritt 3

Klicken Sie dann auf Font -> Show Fonts

Geben Sie hier die Bildbeschreibung ein

Schritt 4

Die Schriftartenansicht wird angezeigt. Klicken Sie auf die Schaltfläche "Unterstreichen", um den Text zu unterstreichen, oder klicken Sie auf die Schaltfläche "Durchgestrichen", um den Text zu markieren.

Geben Sie hier die Bildbeschreibung ein

Zum Abschluss klicken Sie auf die Eingabetaste. Das Label wird entsprechend Ihrer Auswahl unterstrichen oder durchgestrichen dargestellt.

Geben Sie hier die Bildbeschreibung ein

02. Text-Shaddow / Hintergrundunschärfe-Effekte hinzufügen

Rufen Sie die Schriftansicht wie oben beschrieben auf und klicken Sie auf die Schaltfläche Effekte.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Vorschau nicht sehen, klicken Sie auf das Showbild in den Einstellungen

Geben Sie hier die Bildbeschreibung ein

Ändern Sie schließlich Shaddow und Offset nach Ihren Wünschen.

Geben Sie hier die Bildbeschreibung ein

Begründen Sie den Text

Schnell

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

// Create label
let label = UILabel(frame: CGRectMake(0, 0, view.frame.size.width, 400))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping

// Justify text through paragraph style
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Justified
let attributes = [NSParagraphStyleAttributeName: paragraphStyle, NSBaselineOffsetAttributeName: NSNumber(float: 0)]
let attributedString = NSAttributedString(string: sampleText, attributes: attributes)
label.attributedText = attributedString
view.addSubview(label)

Ziel c

  NSString *sampleText = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
    
    // Create label
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 400)];
    label.numberOfLines = 0;
    label.lineBreakMode = NSLineBreakByWordWrapping;
    
    
    // Justify text through paragraph style
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.alignment = NSTextAlignmentJustified;
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:sampleText attributes:@{
                    NSParagraphStyleAttributeName : paragraphStyle,
                    NSBaselineOffsetAttributeName : [NSNumber numberWithFloat:0]
                    }];
    label.attributedText = attributedString;
    [self.view addSubview:label];

Beschriftung mit automatischer Größe für den Text

Dieses Beispiel zeigt, wie die Breite eines Etiketts automatisch angepasst werden kann, wenn sich der Textinhalt ändert.

animiertes gif der automatisch anpassbaren beschriftung

Befestigen Sie die linke und obere Kante

Verwenden Sie das automatische Layout, um Einschränkungen hinzuzufügen, um die linke und obere Seite des Etiketts zu fixieren.

Screenshot: Automatische Layout-Einschränkungen festlegen

Danach wird die Größe automatisch angepasst.

Anmerkungen

  • Dieses Beispiel stammt aus dieser Stack Overflow-Antwort .

  • Fügen Sie keine Einschränkungen für die Breite und Höhe hinzu. Etiketten haben eine intrinsische Größe, die auf ihrem Textinhalt basiert.

  • Bei Verwendung des automatischen Layouts muss sizeToFit werden. Der vollständige Code für das Beispielprojekt ist hier:

      import UIKit
      class ViewController: UIViewController {
      
          @IBOutlet weak var myLabel: UILabel!
      
          @IBAction func changeTextButtonTapped(sender: UIButton) {
              myLabel.text = "my name is really long i want it to fit in this box"
          }
      }
    
  • Diese Methode kann auch verwendet werden, um mehrere Beschriftungen wie in diesem Beispiel horizontal korrekt zu platzieren.

Animiertes GIF mit automatischer Größenänderung für mehrere Labels

  • Wenn Sie möchten, dass Ihr Label Zeilenumbruch aufweist, setzen Sie die Anzahl der Zeilen in IB auf 0 und fügen Sie myLabel.preferredMaxLayoutWidth = 150 // or whatever im Code hinzu. (Die Schaltfläche ist auch an der Unterseite des Etiketts fixiert, sodass sie sich nach unten bewegt, wenn die Etikettenhöhe erhöht wird.)

Screenshot: mehrzeilige Größenänderung

Ermitteln Sie die Größe von UILabel streng nach Text und Schriftart

NSString stellt die Methode boundingRectWithSize bereit, mit der die resultierende CGSize eines UILabel basierend auf seinem Text und seiner Schriftart UILabel ohne dass ein UILabel

Ziel c

[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];

Schnell

let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size

Schnell

Erstellen Sie einen Auslass für Beschriftung und Beschriftung für die Höhenbeschränkung. Fügen Sie unten den Code hinzu, an dem Sie Text für die Beschriftung festlegen möchten.

@IBOutlet var lblDescriptionHeightConstration: NSLayoutConstraint! 
@IBOutlet weak var lblDescription: UILabel!

let maxWidth = UIScreen.mainScreen().bounds.size.width - 40
let sizeOfLabel = self.lblDesc.sizeThatFits(CGSize(width: maxWidth, height: CGFloat.max))
self.lblDescriptionHeightConstration.constant = sizeOfLabel.height

Hinweis: "40" ist der Platz auf der linken und rechten Seite des Bildschirms.

Hervorgehobene und hervorgehobene Textfarbe

Ziel c

UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];

Schnell

let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()

Swift 3

let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow