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:

Schermafbeelding van Interface Builder

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.

voer hier de afbeeldingsbeschrijving in

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

iOS 8.2

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];
iOS 8.2

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

Raadpleeg deze link

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:

voer hier de afbeeldingsbeschrijving in

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:

voer hier de afbeeldingsbeschrijving in

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:

voer hier de afbeeldingsbeschrijving in

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:

voer hier de afbeeldingsbeschrijving in

Deze keer, wanneer we de app uitvoeren, wordt labelOne correct weergegeven:

voer hier de afbeeldingsbeschrijving in

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;

voer hier de afbeeldingsbeschrijving in

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

iOS 6

Snel

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

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:

voer hier de afbeeldingsbeschrijving in voer hier de afbeeldingsbeschrijving in

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 een UILabel maken UILabel u kunt tikken. Gebruik dit voorbeeld alleen als u zeker weet dat u om een of andere reden geen UIButton wilt gebruiken.

  1. Label maken
  2. Schakel gebruikersinteractie in
  3. 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:

voer hier de afbeeldingsbeschrijving in

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 voer hier de afbeeldingsbeschrijving in voer hier de afbeeldingsbeschrijving in

Stap 2

Klik op de labeltekst en klik met de rechtermuisknop

voer hier de afbeeldingsbeschrijving in

Stap 3

Klik vervolgens op Lettertype -> Lettertypen tonen

voer hier de afbeeldingsbeschrijving in

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.

voer hier de afbeeldingsbeschrijving in

Klik ten slotte op Enter en het label wordt onderstreept of doorgehaald weergegeven, afhankelijk van uw selectie.

voer hier de afbeeldingsbeschrijving in

02. Voeg tekstschaduw / achtergrond vervagingseffecten toe

Download de lettertypeweergave zoals hierboven beschreven en klik op de effectenknop.

voer hier de afbeeldingsbeschrijving in

Als u het voorbeeld niet ziet, klikt u op de afbeelding weergeven in de instellingen

voer hier de afbeeldingsbeschrijving in

Wijzig ten slotte de schaduw en offset volgens uw voorkeuren.

voer hier de afbeeldingsbeschrijving in

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.

geanimeerde gif van label voor automatisch vergroten of verkleinen

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.

screenshot: automatische lay-outbeperkingen instellen

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 .

geanimeerde gif die automatisch de grootte van meerdere labels toont

  • 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.)

screenshot: formaat wijzigen van meerdere regels

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow