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:
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.
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
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];
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
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:
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:
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:
Ä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:
Den här gången, när vi kör appen, visas labelOne korrekt:
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;
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
på .Height
attributet
Snabb
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
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:
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 enUILabel
du kan trycka på. Använd bara detta exempel, om du är säker, att du inte vill använda enUIButton
av någon anledning.
- Skapa etikett
- Aktivera användarinteraktion
- 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:
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
Steg 2
Klicka på etiketteksten och högerklicka
Steg 3
Klicka sedan på Teckensnitt -> Visa teckensnitt
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.
Slutligen klicka på Enter och etiketten kommer att visas understruk eller genomgått enligt ditt val.
02. Lägg till effekter på skuggad / bakgrundssuddighet
Få teckensnittvisningen enligt ovan och klicka på effektsknappen.
Om du inte ser förhandsgranskningen klickar du på visningsbilden i inställningarna
Ändra slutligen skugga och offset enligt dina önskemål.
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.
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.
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 angesizeToFit
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 .
- 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.)
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