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:
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.
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
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];
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
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:
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:
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:
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:
Wenn Sie diesmal die App ausführen, wird labelOne korrekt angezeigt:
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;
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
Schnell
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
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:
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 einUILabel
SieUILabel
können. Verwenden Sie dieses Beispiel nur, wenn Sie sicher sind, dass Sie aus irgendeinem Grund keinUIButton
verwendenUIButton
.
- Label erstellen
- Benutzerinteraktion aktivieren
- 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:
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
Schritt 2
Klicken Sie auf den Etikettentext und klicken Sie mit der rechten Maustaste
Schritt 3
Klicken Sie dann auf Font -> Show Fonts
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.
Zum Abschluss klicken Sie auf die Eingabetaste. Das Label wird entsprechend Ihrer Auswahl unterstrichen oder durchgestrichen dargestellt.
02. Text-Shaddow / Hintergrundunschärfe-Effekte hinzufügen
Rufen Sie die Schriftansicht wie oben beschrieben auf und klicken Sie auf die Schaltfläche Effekte.
Wenn Sie die Vorschau nicht sehen, klicken Sie auf das Showbild in den Einstellungen
Ändern Sie schließlich Shaddow und Offset nach Ihren Wünschen.
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.
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.
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.
- 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.)
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