Sök…


Introduktion

Klassen UILabel implementerar en skrivskyddad textvy. Du kan använda den här klassen för att rita en eller flera rader med statisk text, till exempel de du kan använda för att identifiera andra delar av ditt användargränssnitt. Bas UILabel-klassen ger stöd för både enkel och komplex utformning av etiketteksten. Du kan också kontrollera aspekter av utseende, till exempel om etiketten använder en skugga eller ritar med en höjdpunkt. Vid behov kan du anpassa utseendet på din text ytterligare genom att underklassera.

Syntax

  • UILabel.numberOfLines: Int // få eller ställa in det maximala antalet rader som etiketten kan ha. 0 är obegränsat
  • UILabel.text: String? // få eller ställa in texten som etiketten visar
  • UILabel.textColor: UIColor! // få eller ange färgen på texten på etiketten
  • UILabel.tintColor: UIColor! // få eller ställa in tonfärgen på etiketten
  • UILabel.attiatedText: NSAttiatedString? // få eller ställa in den tillskrivna texten på etiketten
  • UILabel.font: UIFont! // hämta eller ställa in typsnittet på texten på etiketten
  • UILabel.textAlignment: NSTextAlignment // få eller ställa in textens justering

Anmärkningar

UIL-märken är vyer som kan användas för att visa en eller flera textrader. Den innehåller flera sätt att stilisera text, till exempel skuggor, textfärger och teckensnitt.

UIL-märken kan också visa Tillskrivna strängar, som är text + inline markering för att tillämpa stilar på delar av texten.

UILabel överensstämmer inte med UIAppearance-protokollet, så du kan inte använda UIAppearance-proxymetoder för att anpassa UIL-märkningens utseende. Se den här diskussionen för mer.

Apple Developer-referens här

Ändra text i en befintlig etikett

Ändra texten i en befintlig UILabel kan göras genom att gå och modifiera text egendom UILabel . Detta kan göras direkt med hjälp av String literals eller indirekt med variabler.

Ställa in text med String litteraler

Snabb

label.text = "the new text"

Objective-C

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

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

Ställa in texten med en variabel

Snabb

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

Objective-C

NSString * stringVar = @"basic String var";

// Dot Notation
label.text = stringVar;

// Message Pattern
[label setText: stringVar];

Text färg

Du kan använda etikettens textColor egenskap för att tillämpa en textColor .

Snabb

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

Snabb 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)

Objective-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];

Applicera textfärg på en del av texten

Du kan också variera textfärgen (eller andra attribut) på delar av texten med hjälp av NSAttributedString :

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

Snabb

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

Textinriktning

Snabb

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

Varje värde i NSTextAlignment enum gäller: .left , .center , .right , .justified , .natural

Objective-C

label.textAlignment = NSTextAlignmentLeft;

Alla värden i NSTextAlignment enum är giltiga: NSTextAlignmentLeft , NSTextAlignmentCenter , NSTextAlignmentRight , NSTextAlignmentJustified , NSTextAlignmentNatural

Vertikal inriktning i UILabel stöds inte ur rutan: Justera text vertikalt till toppen inom en UIL-etikett

Skapa en UIL-etikett

Med en ram

När du vet exakta dimensioner som du vill ställa in för din etikett kan du initiera en UILabel med en CGRect ram.

Snabb

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

Objective-C

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

Med automatisk layout

Du kan lägga till begränsningar på en UILabel när du vill att iOS ska beräkna dess ram under körning dynamiskt.

Snabb

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)
])

Objective-C

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

Med Objekt-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-dokumentation kan hittas här

Efter att etiketten har skapats, se till att du ställer in dimensioner via Auto Layout. Xcode visar fel om det görs felaktigt.

Med gränssnittsbyggare

Du använder också Interface Builder för att lägga till en UILabel till din Storyboard eller .xib fil genom att dra en Label från panelen Object Library och släppa den till en vy i duken:

Skärmdump från Interface Builder

I stället för att specificera en ram (position och storlek) för en UILabel programmatiskt UILabel en Storyboard eller en .xib använda Auto Layout för att lägga till begränsningar i kontrollen.

För att få åtkomst till den här etiketten skapad från storyboard eller xib skapa en IBOutlet för den här etiketten.

Länk mellan Interface Builder och View Controller

När du har lagt till en UILabel till ditt Storyboard eller .xib filen kan du länka den till din kod genom att trycka på Control ⌃ och sedan dra musen mellan UILabel till din ViewController , eller så kan du dra till koden medan du högerklickar på den för att har samma effekt.

ange bildbeskrivning här

I egenskapsdialogen kan du ange namnet på UILabel och ställa in det som strong eller weak . För mer information om strong och weak , se detta ,

Det andra sättet är att göra utloppet programmatiskt enligt följande:

Snabb

@IBOutlet weak var nameLabel : UILabel!

Objective-C

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

Ställ in teckensnitt

Snabb

let label = UILabel()

Objective-C

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

Ändra standardstorlekens storlek

Snabb

label.font = UIFont.systemFontOfSize(17)

Snabb 3

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

Objective-C

label.font = [UIFont systemFontOfSize:17];

Använd en specifik typsnittsvikt

iOS 8.2

Snabb

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

Swift3

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

Objective-C

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

Snabb

label.font = UIFont.boldSystemFontOfSize(17)

Swift3

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

Objective-C

label.font = [UIFont boldSystemFontOfSize:17];

Använd en textstil med dynamisk typ.

Teckensnitt och punktstorlek baseras på användarens önskade lässtorlek.

Snabb

label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)

Snabb 3

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

Objective-C

label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];

Använd helt enkelt ett annat teckensnitt

Snabb

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

Objective-C

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

Åsidosätt teckenstorlek

Ett sätt att ställa in teckenstorlek utan att veta typsnittet är att använda tecken egendom UILabel .

Snabb

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

Snabb 3

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

Objective-C

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

Använd Custom Font Swift

Se den här länken

Antal linjer

När du skapar en etikett och ställer in dess text till att vara mer än en enda rad som den kan visa, kommer den att avkortas och du ser bara en rad text som slutar med tre punkter (...). Detta beror på att en egenskap som heter numberOfLines är inställd på 1, och därför kommer bara en rad att visas. Det är ett vanligt misstag att hantera UILabel s, och många tänker på det som ett fel, eller de kan använda mer än en etikett för att visa mer än en rad med text, men bara genom att redigera den här egenskapen kan vi berätta en UILabel till acceptera upp till det angivna antalet rader. Om den egenskapen till exempel är inställd på 5 kan etiketten visa 1, 2, 3, 4 eller 5 rader med data.

Ställa in värdet programmatiskt

För att ställa in den här egenskapen, tilldela helt enkelt ett nytt heltal till det:

Snabb

label.numberOfLines = 2

Objective-C

label.numberOfLines = 2;

Notera

Det är möjligt att ställa in den här egenskapen till 0. Detta betyder dock inte att den inte kommer att acceptera några rader, utan det betyder att etiketten kan ha så många rader som behövs (alias "Infinity"):

Snabb

label.numberOfLines = 0

Objective-C

label.numberOfLines = 0;

Notera

Om etiketten har en höjdbegränsning respekteras begränsningen. I detta fall label.numberOfLines = 0 inte fungerar som förväntat.

Notera

För en mer komplex text med flera linjer kan UITextView passa bättre. *

Ställa in värdet i Interface Builder

I stället för att ställa in numberOfLines programmatiskt kan du använda ett Storyboard eller en .xib och ställa numberOfLines egenskapen numberOfLines . På så sätt uppnår vi samma resultat som ovanstående kod.

Gilla som nedan:

ange bildbeskrivning här

Storlek som passar

Anta att du har en UILabel på din storyboard och att du har skapat en IBOutlet för den i ViewController.swift / ViewController.m och namngivit den labelOne .

För att göra ändringarna lätt synliga ändrar du backgroundColor textColor och textColor på etiketten viewDidLoad metoden viewDidLoad :

Funktionsstorleken sizeToFit används när du automatiskt vill ändra storlek på en etikett baserat på det innehåll som är lagrat i den.

Snabb

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

Snabb 3

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

Objective-C

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

Utgången för ovanstående kod är:

ange bildbeskrivning här

Som ni ser är det ingen förändring eftersom texten passar perfekt i labelOne. sizeToFit ändrar endast etikettens ram.

Låt oss ändra texten till något längre:

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

Nu ser etikett ut så här:

ange bildbeskrivning här

Även att ringa sizeToFit förändrar ingenting. Detta beror på att numretOfLines som visas av UIL-märket är som standard inställt på 1. Låt oss ändra det till noll på storyboard:

ange bildbeskrivning här

Den här gången, när vi kör appen, visas labelOne korrekt:

ange bildbeskrivning här

numberOfLines kan också ändras i ViewController filen:

// Objective-C
labelOne.numberOfLines = 0; 

// Swift
labelOne.numberOfLines = 0

Bakgrundsfärg

Snabb

label.backgroundColor = UIColor.redColor()

label.backgroundColor = .redColor()

Snabb 3

label.backgroundColor = UIColor.red

Objective-C

label.backgroundColor = [UIColor redColor];

Lägg till skuggor i texten

Snabb

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

Snabb 3

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

Objective-C

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

ange bildbeskrivning här

Variabel höjd med begränsningar

Du kan skapa en UILabel med dynamisk höjd med automatisk layout.

Du måste ställa in numberOfLines till noll (0), och lägga till en minimal höjd genom att ställa in en begränsning med en relation av typen .GreaterThanOrEqual.Height attributet

iOS 6

Snabb

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

Snabb

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

LineBreakMode

Använda kod

UILabel.lineBreakMode: NSLineBreakMode

Snabb

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

Snabb 3

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

Objective-C

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

Använda storyboard

Detta kan också ställas in i attributinspektören för en UIL-etikett:

ange bildbeskrivning här ange bildbeskrivning här

Konstanter anter~~POS=HEADCOMP

  • Ordbrytning - lindning sker vid ordgränser, såvida inte själva ordet passar på en enda rad
  • Char Wrapping - lindning sker före den första karaktären som inte passar
  • Klippning - linjer dras helt enkelt inte förbi kanten på textbehållaren
  • Trunkeringshuvud - raden visas så att änden passar i behållaren och den saknade texten i början av raden indikeras av en ellipsglyf
  • Trunkera svans - raden visas så att början passar in i behållaren och den saknade texten i slutet av raden indikeras av en ellipsglyf
  • Trunkera mitt - raden visas så att början och slut passar in i behållaren och den saknade texten i mitten indikeras av en ellipsglyf

Beräkna innehållsgränser (för t.ex. dynamiska cellhöjder)

Ett vanligt användningsfall för att vilja beräkna ramen som en etikett kommer att ta upp är för att dimensionera tabellvyceller på lämpligt sätt. Det rekommenderade sättet att göra detta är att använda NSString metoden boundingRectWithSize:options:attributes:context: NSString

options tar strängritningsalternativ:

  • NSStringDrawingUsesLineFragmentOrigin bör användas för etiketter med flera rader
  • NSStringDrawingTruncatesLastVisibleLine bör läggas till med hjälp av | operatör om det finns ett maximalt antal rader

attributes är en NSDictionary av attribut som påverkar tilldelade strängar (full lista: Apple Docs ) men faktorerna som påverkar höjden inkluderar:

  • NSFontAttributeName : Mycket viktigt, storleken och teckensnittsfamiljen är en kritisk del av etikettens visade storlek.

  • NSParagraphStyleAttributeName : För att anpassa hur texten visas. Detta inkluderar linjeavstånd, textjustering, trunkeringsstil och några andra alternativ. Om du inte uttryckligen ändrade några av dessa värden, borde du inte behöva oroa dig för så mycket, men det kan vara viktigt om du växlade några värden på IB.

context bör vara nil eftersom det primära fallet för NSStringDrawingContext är för att låta teckensnittet ändra storlek för att passa en specificerad rekt, vilket inte borde vara fallet om vi beräknar en dynamisk höjd.

Mål 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
}

Omvänt, om du har ett fastställt maximalt antal rader, måste du först beräkna höjden på en enda rad för att se till att vi inte får ett värde högre än den tillåtna storleken:

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

Klickbar etikett

OBS: I de flesta fall är det bättre att använda en UIButton istället för att skapa en UILabel du kan trycka på. Använd bara detta exempel, om du är säker, att du inte vill använda en UIButton av någon anledning.

  1. Skapa etikett
  2. Aktivera användarinteraktion
  3. Lägg till UITapGestureRecognizer

Nyckeln till att skapa en klickbar UILabel är att aktivera användarinteraktion.

Snabb

let label = UILabel()
label.userInteractionEnabled = true

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

Objective-C

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

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

Ställer in "userInteractionEnabled" i storyboards attributinspektör

Istället för att använda kod kan du välja UIL-etiketten i storyboard och kontrollera alternativet:

ange bildbeskrivning här

Dynamisk etikettram från okänd textlängd

Ibland måste vi ändra storlek på en UIL-etikett baserad på dynamiskt innehåll där textlängden är okänd. I detta exempel är bredden på UIL-etiketten fixerad till 280 punkter och höjden är oändlig, låt oss säga 9999. Uppskatta ramen med avseende på textstil och maximumLabelSize.

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

Snabb

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

Tillskrivad text

01. Understrukningstext: - Enkel / dubbel linje, genomslag: - Enkel / dubbel linje

Steg 1

Välj etiketten och ändra etikettypen Vanligt till Tillskrivet ange bildbeskrivning här ange bildbeskrivning här

Steg 2

Klicka på etiketteksten och högerklicka

ange bildbeskrivning här

Steg 3

Klicka sedan på Teckensnitt -> Visa teckensnitt

ange bildbeskrivning här

Steg 4

Då kommer teckensnittet att visas och klicka på understrykningsknappen för att göra texten understrukad eller klicka på genomgående knapp för att göra texten genomsträckt. Och välj en rad eller dubbelrad.

ange bildbeskrivning här

Slutligen klicka på Enter och etiketten kommer att visas understruk eller genomgått enligt ditt val.

ange bildbeskrivning här

02. Lägg till effekter på skuggad / bakgrundssuddighet

Få teckensnittvisningen enligt ovan och klicka på effektsknappen.

ange bildbeskrivning här

Om du inte ser förhandsgranskningen klickar du på visningsbilden i inställningarna

ange bildbeskrivning här

Ändra slutligen skugga och offset enligt dina önskemål.

ange bildbeskrivning här

Motivera text

Snabb

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)

Objective-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];

Auto-storlek etikett för att passa text

Det här exemplet visar hur en etiketts bredd automatiskt kan ändra storlek när textinnehållet ändras.

animerad gif för automatisk storlek på etikett

Fäst vänster och övre kanter

Använd bara automatisk layout för att lägga till begränsningar för att fästa etikettens vänstra och övre sida.

skärmdump: ställa in automatisk layoutbegränsningar

Därefter ändras storleken automatiskt.

anteckningar

  • Detta exempel kommer från detta Stack Overflow-svar .

  • Lägg inte till begränsningar för bredd och höjd. Etiketter har en egen storlek baserat på deras textinnehåll.

  • sizeToFit behöver inte ange sizeToFit när du använder automatisk layout. Den fullständiga koden för exempelprojektet är här:

      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"
          }
      }
    
  • Den här metoden kan också användas för att korrekt placera flera etiketter horisontellt som i detta exempel .

animerad gif som visar automatisk storlek på flera etiketter

  • Om du vill att din etikett ska raderas så ställer du in antalet rader till 0 i IB och lägger till myLabel.preferredMaxLayoutWidth = 150 // or whatever i kod. (Knappen är också fäst vid botten av etiketten så att den kommer att röra sig när etikettens höjd ökade.)

skärmdump: storlek på flera linjer

Få UILabels storlek strikt baserat på dess text och typsnitt

NSString tillhandahåller boundingRectWithSize som kan användas för att förutsäga det resulterande CGS-storleken för ett UILabel baserat på dess text och typsnitt utan behov av att skapa ett UILabel

Objective-C

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

Snabb

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

Snabb

Skapa etikett och etikett Höjdbegränsningsuttag. Lägg till koden nedan där du kommer att tilldela text till etiketten.

@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

Obs: "40" är utrymmet på vänster och höger sida av skärmen.

Markerad och markerad textfärg

Objective-C

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

Snabb

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

Snabb 3

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow