Zoeken…
Invoering
De klasse UILabel implementeert een alleen-lezen tekstweergave. U kunt deze klasse gebruiken om een of meerdere regels statische tekst te tekenen, zoals die welke u kunt gebruiken om andere delen van uw gebruikersinterface te identificeren. De basis UILabel-klasse biedt ondersteuning voor zowel een eenvoudige als complexe stijl van de labeltekst. U kunt ook bepalen over aspecten van het uiterlijk, zoals of het label een schaduw gebruikt of tekent met een hoogtepunt. Indien nodig kunt u het uiterlijk van uw tekst verder aanpassen door subklasse.
Syntaxis
- UILabel.numberOfLines: Int // haal het maximale aantal regels van het label op of stel dit in. 0 is onbeperkt
- UILabel.text: String? // haal de tekst op het label op of stel deze in
- UILabel.textColor: UIColor! // haal de kleur van de tekst op het label op of stel deze in
- UILabel.tintColor: UIColor! // haal de tintkleur van het label op of stel deze in
- UILabel.attributedText: NSAttributedString? // haal de toegewezen tekst van het label op of stel deze in
- UILabel.font: UIFont! // haal het lettertype van de tekst op het label op of stel het in
- UILabel.textAlignment: NSTextAlignment // de uitlijning van de tekst ophalen of instellen
Opmerkingen
UILabels zijn weergaven die kunnen worden gebruikt om een of meerdere regels tekst weer te geven. Het bevat meerdere manieren om tekst te stileren, zoals schaduwen, tekstkleuren en lettertypen.
UILabels kunnen ook Attributed Strings weergeven, wat tekst + inline markup is om stijlen toe te passen op delen van de tekst.
UILabel voldoet niet aan het UIAppearance-protocol, dus u kunt de UIAppearance-proxy-methoden niet gebruiken om het uiterlijk van UILabels aan te passen. Zie deze discussie voor meer.
Apple Developer referentie hier
Tekst in een bestaand label wijzigen
Het veranderen van de tekst van een bestaande UILabel
kan worden gedaan door de toegang tot en het wijzigen van de text
eigendom van de UILabel
. Dit kan direct worden gedaan met behulp van String
literals of indirect met behulp van variabelen.
De tekst instellen met String
literals
Snel
label.text = "the new text"
Doelstelling C
// Dot Notation
label.text = @"the new text";
// Message Pattern
[label setText:@"the new text"];
De tekst instellen met een variabele
Snel
let stringVar = "basic String var"
label.text = stringVar
Doelstelling C
NSString * stringVar = @"basic String var";
// Dot Notation
label.text = stringVar;
// Message Pattern
[label setText: stringVar];
Tekst kleur
U kunt de eigenschap textColor
het label gebruiken om een tekstkleur op de hele tekst van het label toe te passen.
Snel
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)
Doelstelling 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];
Tekstkleur toepassen op een gedeelte van de tekst
U kunt ook de tekstkleur (of andere kenmerken) van delen van de tekst NSAttributedString
met behulp van NSAttributedString
:
Doelstelling 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;
Snel
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
Tekstuitlijning
Snel
label.textAlignment = NSTextAlignment.left
//or the shorter
label.textAlignment = .left
Elke waarde in het NSTextAlignment
is geldig: .left
, .center
, .right
, .justified
, .natural
Doelstelling C
label.textAlignment = NSTextAlignmentLeft;
Elke waarde in het opsomming NSTextAlignment
is geldig: NSTextAlignmentLeft
, NSTextAlignmentCenter
, NSTextAlignmentRight
, NSTextAlignmentJustified
, NSTextAlignmentNatural
Verticale uitlijning in UILabel
wordt niet UILabel
ondersteund: tekst verticaal naar boven uitlijnen binnen een UILabel
Maak een UILabel
Met een lijst
Wanneer u de exacte afmetingen weet die u voor uw label wilt instellen, kunt u een UILabel
initialiseren met een CGRect
frame.
Snel
let frame = CGRect(x: 0, y: 0, width: 200, height: 21) let label = UILabel(frame: frame) view.addSubview(label)
Doelstelling C
CGRect frame = CGRectMake(0, 0, 200, 21); UILabel *label = [[UILabel alloc] initWithFrame:frame]; [view addSubview:label];
Met Auto Layout
Je kunt beperkingen aan een UILabel
als je wilt dat iOS het frame tijdens runtime dynamisch berekent.
Snel
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) ])
Doelstelling C
UILabel *label = [[UILabel alloc] init];
Met 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}]]
VFL documentatie vindt u hier
Nadat het label is gemaakt, moet u de afmetingen instellen via Auto Layout. Xcode geeft fouten weer als dit onjuist is gedaan.
Met Interface Builder
U gebruikt ook Interface Builder om een UILabel
toe te voegen aan uw Storyboard
of .xib
bestand door een Label
uit het deelvenster .xib
te slepen en naar een weergave in het canvas te slepen:
In plaats van een frame (positie en grootte) voor een UILabel
programmatisch op te geven, kunt u met een Storyboard
of .xib
Auto Layout gebruiken om beperkingen aan het besturingselement toe te voegen.
Om toegang te krijgen tot dit label gemaakt op basis van storyboard
of xib
, maakt u een IBOutlet van dit label.
Koppeling tussen Interface Builder en View Controller
Nadat u een UILabel
aan uw Storyboard
of .xib
het bestand hebt toegevoegd, kunt u het aan uw code koppelen door op Control ⌃
drukken en vervolgens de muis tussen de UILabel
naar uw ViewController
slepen, of u kunt naar de code slepen terwijl u erop klikt om hetzelfde effect hebben.
In het dialoogvenster met eigenschappen kunt u de naam UILabel
instellen en deze instellen als strong
of weak
. Voor meer informatie over de strong
en weak
, zie dit ,
De andere manier is om de outlet als volgt programmatisch te maken:
Snel
@IBOutlet weak var nameLabel : UILabel!
Doelstelling C
@property (nonatomic, weak) IBOutlet UILabel *nameLabel;
Stel lettertype in
Snel
let label = UILabel()
Doelstelling C
UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init
Wijzig de grootte van het standaardlettertype
Snel
label.font = UIFont.systemFontOfSize(17)
Swift 3
label.font = UIFont.systemFont(ofSize: 17)
Doelstelling C
label.font = [UIFont systemFontOfSize:17];
Gebruik een specifiek lettergewicht
Snel
label.font = UIFont.systemFontOfSize(17, weight: UIFontWeightBold)
Swift3
label.font = UIFont.systemFont(ofSize: 17, weight: UIFontWeightBold)
Doelstelling C
label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
Snel
label.font = UIFont.boldSystemFontOfSize(17)
Swift3
label.font = UIFont.boldSystemFont(ofSize: 17)
Doelstelling C
label.font = [UIFont boldSystemFontOfSize:17];
Gebruik een dynamische tekststijl.
Het lettertype en de puntgrootte zijn gebaseerd op de gewenste leesgrootte van de gebruiker.
Snel
label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
Swift 3
label.font = UIFont.preferredFont(forTextStyle: .body)
Doelstelling C
label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
Gebruik helemaal een ander lettertype
Snel
label.font = UIFont(name: "Avenir", size: 15)
Doelstelling C
label.font = [UIFont fontWithName:@"Avenir" size:15];
Lettertype overschrijven
Een manier om de lettergrootte in te stellen zonder de lettertypefamilie te kennen, is door de eigenschap font van UILabel
.
Snel
label.font = label.font.fontWithSize(15)
Swift 3
label.font = label.font.withSize(15)
Doelstelling C
label.font = [label.font fontWithSize:15];
Gebruik Aangepast lettertype Swift
Aantal lijnen
Wanneer u een label maakt en de tekst instelt op meer dan één regel die kan worden weergegeven, wordt deze afgekapt en ziet u slechts één regel tekst die eindigt met drie punten (...). Dit komt omdat een eigenschap met de naam numberOfLines
is ingesteld op 1 en daarom wordt slechts één regel weergegeven. Het is een veel voorkomende fout bij het omgaan met UILabel
's, en veel mensen beschouwen het als een bug, of ze kunnen meer dan één label gebruiken om meer dan een regel tekst weer te geven, maar alleen door deze eigenschap te bewerken, kunnen we een UILabel
vertellen accepteer tot het gespecificeerde aantal regels. Als deze eigenschap bijvoorbeeld is ingesteld op 5, kan het label 1, 2, 3, 4 of 5 gegevensregels weergeven.
De waarde programmatisch instellen
Om deze eigenschap in te stellen, wijst u er eenvoudig een nieuw geheel getal aan toe:
Snel
label.numberOfLines = 2
Doelstelling C
label.numberOfLines = 2;
Notitie
Het is mogelijk om deze eigenschap in te stellen op 0. Dit betekent echter niet dat er geen regels worden geaccepteerd, maar dat het label zoveel regels kan bevatten als nodig is (aka "Infinity"):
Snel
label.numberOfLines = 0
Doelstelling C
label.numberOfLines = 0;
Notitie
Als het label een hoogtebeperking heeft, wordt de beperking gerespecteerd. In dit geval werkt
label.numberOfLines = 0
mogelijk niet zoals verwacht.
Notitie
Voor een meer complexe tekst met meerdere regels is UITextView wellicht beter geschikt. *
De waarde instellen in de Interface Builder
In plaats van numberOfLines
programmatisch in te stellen, kunt u een Storyboard
of .xib
en de eigenschap numberOfLines
. Op die manier bereiken we dezelfde resultaten als de bovenstaande code.
Zoals hieronder:
Maat om te passen
Stel dat je een UILabel
op je storyboard
en je hebt er een IBOutlet
voor gemaakt in ViewController.swift
/ ViewController.m
en deze labelOne
.
Om de wijzigingen gemakkelijk zichtbaar te maken, wijzigt u de backgroundColor
en textColor
van labelOne in de viewDidLoad
methode:
De functie sizeToFit
wordt gebruikt wanneer u het formaat van een label automatisch wilt wijzigen op basis van de inhoud die erin is opgeslagen.
Snel
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()
Doelstelling C
labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];
De output voor de bovenstaande code is:
Zoals u ziet, is er geen verandering, omdat de tekst perfect past in labelOne. sizeToFit verandert alleen het frame van het label.
Laten we de tekst iets langer maken:
labelOne.text = "Hello, World! I’m glad to be alive!"
Nu ziet labelOne er zo uit:
Zelfs het aanroepen van sizeToFit
verandert niets. Dit komt omdat standaard het aantalOfLijnen dat wordt weergegeven door de UILabel is ingesteld op 1. Laten we dit op het storyboard op nul zetten:
Deze keer, wanneer we de app uitvoeren, wordt labelOne correct weergegeven:
De eigenschap numberOfLines
kan ook worden gewijzigd in het ViewController
bestand:
// Objective-C
labelOne.numberOfLines = 0;
// Swift
labelOne.numberOfLines = 0
Achtergrond kleur
Snel
label.backgroundColor = UIColor.redColor()
label.backgroundColor = .redColor()
Swift 3
label.backgroundColor = UIColor.red
Doelstelling C
label.backgroundColor = [UIColor redColor];
Voeg schaduwen toe aan tekst
Snel
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
Doelstelling C
label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;
Variabele hoogte met behulp van beperkingen
U kunt een UILabel
met een dynamische hoogte maken met behulp van automatische lay-out.
U moet numberOfLines
op nul (0) en een minimale hoogte toevoegen door een beperking in te stellen met een relatie van het type .GreaterThanOrEqual
op het kenmerk .Height
Snel
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
Snel
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true
LineBreakMode
Gebruik code
UILabel.lineBreakMode: NSLineBreakMode
Snel
label.lineBreakMode = .ByTruncatingTail
-
.ByWordWrapping
-
.ByCharWrapping
-
.ByClipping
-
.ByTruncatingHead
-
.ByTruncatingTail
-
.ByTruncatingMiddle
Swift 3
label.lineBreakMode = .byTruncatingTail
-
.byWordWrapping
-
.byCharWrapping
-
.byClipping
-
.byTruncatingHead
-
.byTruncatingTail
-
.byTruncatingMiddle
Doelstelling C
[label setLineBreakMode:NSLineBreakByTruncatingTail];
-
NSLineBreakByWordWrapping
-
NSLineBreakByCharWrapping
-
NSLineBreakByClipping
-
NSLineBreakByTruncatingHead
-
NSLineBreakByTruncatingTail
-
NSLineBreakByTruncatingMiddle
Storyboard gebruiken
Dit kan ook worden ingesteld in de attributeninspecteur van een UILabel:
constanten
- Woordomloop - omloop vindt plaats bij woordgrenzen, tenzij het woord zelf niet op één regel past
- Char Wrapping - wikkeling vindt plaats vóór het eerste karakter dat niet past
- Clipping - lijnen worden eenvoudigweg niet langs de rand van de tekstcontainer getekend
- Afknotkop - de regel wordt weergegeven zodat het uiteinde in de container past en de ontbrekende tekst aan het begin van de regel wordt aangegeven door een ellips-glyph
- Afknottende staart - de regel wordt weergegeven zodat het begin in de container past en de ontbrekende tekst aan het einde van de regel wordt aangegeven door een ellips-glyph
- Afkappen midden - de lijn wordt weergegeven zodat het begin en einde in de container passen en de ontbrekende tekst in het midden wordt aangegeven door een ellips-glyph
Inhoudsgrenzen berekenen (voor bijvoorbeeld dynamische celhoogten)
Een veelvoorkomend geval om het frame te willen berekenen dat een label gaat gebruiken, is om cellen in tabelweergave op de juiste manier te dimensioneren. De aanbevolen manier om dit te doen is de NSString
methode boundingRectWithSize:options:attributes:context:
.
options
neemt tekenreeksopties:
-
NSStringDrawingUsesLineFragmentOrigin
moet worden gebruikt voor labels met meerdere regels -
NSStringDrawingTruncatesLastVisibleLine
moet worden toegevoegd met behulp van de|
operator als er een maximum aantal regels is
attributes
is een NSDictionary
van attributen die toegekende strings beïnvloeden (volledige lijst: Apple Docs ) maar de factoren die de hoogte beïnvloeden omvatten:
NSFontAttributeName : Heel belangrijk, de grootte en lettertypefamilie is een cruciaal onderdeel van de weergegeven grootte van het label.
NSParagraphStyleAttributeName : om aan te passen hoe de tekst wordt weergegeven. Dit omvat regelafstand, tekstuitlijning, afkappingsstijl en een paar andere opties. Als u een van deze waarden niet expliciet hebt gewijzigd, hoeft u zich hier geen zorgen over te maken, maar dit kan belangrijk zijn als u enkele waarden op IB hebt ingeschakeld.
context
moet nil
omdat de primaire NSStringDrawingContext
use case is om het lettertype de grootte te laten aanpassen aan een opgegeven rect, wat niet het geval zou moeten zijn als we een dynamische hoogte berekenen.
Doelstelling 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
}
Omgekeerd, als u een bepaald maximum aantal lijnen heeft, moet u eerst de hoogte van een enkele lijn berekenen om ervoor te zorgen dat we geen waarde krijgen die groter is dan de toegestane grootte:
// 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;
Klikbaar etiket
OPMERKING: In de meeste gevallen is het beter om een
UIButton
te gebruiken in plaats van eenUILabel
makenUILabel
u kunt tikken. Gebruik dit voorbeeld alleen als u zeker weet dat u om een of andere reden geenUIButton
wilt gebruiken.
- Label maken
- Schakel gebruikersinteractie in
-
UITapGestureRecognizer
toevoegen
De sleutel om een klikbare UILabel
te maken is om gebruikersinteractie mogelijk te maken.
Snel
let label = UILabel()
label.userInteractionEnabled = true
let gesture = UITapGestureRecognizer(target: self, action: #selector(labelClicked(_:)))
label.addGestureRecognizer(gesture)
Doelstelling C
UILabel *label = [[UILabel alloc] init];
[label setUserInteractionEnabled:YES];
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[label addGestureRecognizer:gesture];
"UserInteractionEnabled" instellen in de attributeninspecteur van storyboard
In plaats van code te gebruiken, kunt u het UILabel in het storyboard selecteren en de optie aanvinken:
Dynamisch labelframe met onbekende tekstlengte
Soms moeten we het formaat van een UILabel aanpassen op basis van dynamische inhoud waarvan de tekstlengte onbekend is. In dit voorbeeld is de breedte van het UILabel vastgesteld op 280 punten en de hoogte is oneindig, laten we zeggen 9999. Het kader schatten met betrekking tot de tekststijl en maximumLabelSize.
Doelstelling 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;
Snel
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
Label Toegeschreven Tekst
01. Tekst onderstrepen: - Enkele / dubbele lijn, Doorhalen: - Enkele / dubbele lijn
Stap 1
Selecteer het label en wijzig het labeltype Normaal in Toegeschreven
Stap 2
Klik op de labeltekst en klik met de rechtermuisknop
Stap 3
Klik vervolgens op Lettertype -> Lettertypen tonen
Stap 4
Vervolgens wordt de lettertypeweergave weergegeven en klikt u op de onderstreepknop om de tekst te onderstrepen of klikt u op de knop doorhalen om de tekst door te halen. Selecteer een enkele of dubbele regel.
Klik ten slotte op Enter en het label wordt onderstreept of doorgehaald weergegeven, afhankelijk van uw selectie.
02. Voeg tekstschaduw / achtergrond vervagingseffecten toe
Download de lettertypeweergave zoals hierboven beschreven en klik op de effectenknop.
Als u het voorbeeld niet ziet, klikt u op de afbeelding weergeven in de instellingen
Wijzig ten slotte de schaduw en offset volgens uw voorkeuren.
Tekst rechtvaardigen
Snel
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)
Doelstelling 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];
Label met automatische grootte om op tekst te passen
Dit voorbeeld laat zien hoe de breedte van een label automatisch kan worden aangepast wanneer de tekstinhoud verandert.
Speld de linker- en bovenrand
Gebruik gewoon de automatische lay-out om beperkingen toe te voegen om de linker- en bovenkant van het label vast te zetten.
Daarna wordt het formaat automatisch gewijzigd.
Notes
Dit voorbeeld komt uit dit antwoord Stack Overflow .
Voeg geen beperkingen toe voor de breedte en hoogte. Labels hebben een intrinsieke grootte op basis van hun tekstinhoud.
Het is niet nodig om
sizeToFit
in te stellen bij gebruik van automatische lay-out. De volledige code voor het voorbeeldproject is 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" } }
- Deze methode kan ook worden gebruikt om meerdere labels horizontaal te plaatsen zoals in dit voorbeeld .
- Als je wilt dat je label in lijn wordt ingepakt, stel dan het aantal regels in op 0 in IB en voeg
myLabel.preferredMaxLayoutWidth = 150 // or whatever
in code toe. (De knop is ook vastgemaakt aan de onderkant van het label zodat deze naar beneden beweegt wanneer de labelhoogte toeneemt.)
Verkrijg de grootte van UILabel strikt gebaseerd op de tekst en het lettertype
NSString
biedt methode boundingRectWithSize
die kan worden gebruikt om de resulterende CGSize van een UILabel
te voorspellen op basis van de tekst en het lettertype zonder een UILabel
hoeven maken
Doelstelling C
[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];
Snel
let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size
Snel
Creëer label en label Hoogte outlet. Voeg onderstaande code toe waar u de tekst aan het label toewijst.
@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
Opmerking: "40" is de ruimte aan de linker- en rechterkant van het scherm.
Gemarkeerde en gemarkeerde tekstkleur
Doelstelling C
UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];
Snel
let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()
Swift 3
let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red