Ricerca…
introduzione
La classe UILabel implementa una visualizzazione di testo di sola lettura. È possibile utilizzare questa classe per disegnare una o più righe di testo statico, ad esempio quelle che è possibile utilizzare per identificare altre parti dell'interfaccia utente. La classe UILabel di base fornisce supporto per lo stile semplice e complesso del testo dell'etichetta. Puoi anche controllare gli aspetti dell'aspetto, ad esempio se l'etichetta utilizza un'ombra o disegna con un'evidenziazione. Se necessario, è possibile personalizzare ulteriormente l'aspetto del testo mediante sottoclassi.
Sintassi
- UILabel.numberOfLines: Int // ottiene o imposta il numero massimo di righe che l'etichetta può avere. 0 è illimitato
- UILabel.text: String? // ottiene o imposta il testo visualizzato dall'etichetta
- UILabel.textColor: UIColor! // ottiene o imposta il colore del testo sull'etichetta
- UILabel.tintColor: UIColor! // ottiene o imposta il colore della tinta dell'etichetta
- UILabel.attributedText: NSAttributedString? // ottiene o imposta il testo attribuito dell'etichetta
- UILabel.font: UIFont! // ottiene o imposta il carattere del testo sull'etichetta
- UILabel.textAlignment: NSTextAlignment // ottiene o imposta l'allineamento del testo
Osservazioni
UILabels sono viste che possono essere utilizzate per visualizzare una o più righe di testo. Contiene diversi modi di stilizzare il testo, come ombre, colori del testo e caratteri.
UILabels può anche visualizzare le stringhe attribuite, che è testo + markup in linea per applicare gli stili a porzioni di testo.
UILabel non è conforme al protocollo UIAppearance, quindi non è possibile utilizzare i metodi proxy di UIAppearance per personalizzare l'aspetto di UILabels. Vedi questa discussione per ulteriori informazioni.
Riferimento per gli sviluppatori Apple qui
Modifica del testo in un'etichetta esistente
La modifica del testo di una UILabel
esistente può essere effettuata accedendo e modificando la proprietà text
di UILabel
. Questo può essere fatto direttamente usando letterali String
o indirettamente usando variabili.
Impostazione del testo con valori letterali String
veloce
label.text = "the new text"
Objective-C
// Dot Notation
label.text = @"the new text";
// Message Pattern
[label setText:@"the new text"];
Impostazione del testo con una variabile
veloce
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];
Colore del testo
È possibile utilizzare la proprietà textColor
dell'etichetta per applicare un colore di testo all'intero testo dell'etichetta.
veloce
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)
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];
Applicazione del colore del testo a una parte del testo
Puoi anche variare il colore del testo (o altri attributi) di porzioni del testo usando 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;
veloce
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
Allineamento del testo
veloce
label.textAlignment = NSTextAlignment.left
//or the shorter
label.textAlignment = .left
Qualsiasi valore nella NSTextAlignment
enum è valida: .left
, .center
, .right
, .justified
, .natural
Objective-C
label.textAlignment = NSTextAlignmentLeft;
Qualsiasi valore NSTextAlignment
è valido: NSTextAlignmentLeft
, NSTextAlignmentCenter
, NSTextAlignmentRight
, NSTextAlignmentJustified
, NSTextAlignmentNatural
L'allineamento verticale in UILabel
non è supportato UILabel
: allinea verticalmente il testo in cima a un UILabel
Crea un UILabel
Con una cornice
Quando conosci le dimensioni esatte che desideri impostare per l'etichetta, puoi inizializzare un UILabel
con una cornice CGRect
.
veloce
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];
Con layout automatico
È possibile aggiungere vincoli su un UILabel
quando si desidera che iOS calcoli dinamicamente il frame in fase di runtime.
veloce
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];
Con 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}]]
La documentazione VFL può essere trovata qui
Dopo aver creato l'etichetta, assicurati di impostare le dimensioni tramite Auto Layout. Xcode mostrerà errori se è fatto in modo improprio.
Con Interface Builder
Inoltre, si utilizza Interface Builder per aggiungere una UILabel
allo Storyboard
o .xib
file .xib
trascinando Label
dal pannello Libreria oggetti e rilasciandola in una vista nell'area di disegno:
Invece di specificare un frame (posizione e dimensione) per un UILabel
a livello di UILabel
, uno Storyboard
o un file .xib
consente di utilizzare Auto Layout per aggiungere vincoli al controllo.
Per accedere a questa etichetta creata da storyboard
o xib
creare un IBOutlet di questa etichetta.
Collegamento tra Interface Builder e View Controller
Dopo aver aggiunto un UILabel
al vostro Storyboard
o .xib
il file è possibile collegare al vostro codice premendo Control ⌃
e trascinando il mouse tra UILabel
al ViewController
, o si potrebbe trascinare al codice mentre clic destro per la sua avere lo stesso effetto
Nella finestra di dialogo delle proprietà, puoi impostare il nome di UILabel
e impostarlo come strong
o weak
. Per ulteriori informazioni su strong
e weak
, vedere questo ,
L'altro modo è di creare lo sbocco programmaticamente come segue:
veloce
@IBOutlet weak var nameLabel : UILabel!
Objective-C
@property (nonatomic, weak) IBOutlet UILabel *nameLabel;
Imposta carattere
veloce
let label = UILabel()
Objective-C
UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init
Cambia la dimensione del carattere predefinito
veloce
label.font = UIFont.systemFontOfSize(17)
Swift 3
label.font = UIFont.systemFont(ofSize: 17)
Objective-C
label.font = [UIFont systemFontOfSize:17];
Usa un peso specifico per il font
veloce
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];
veloce
label.font = UIFont.boldSystemFontOfSize(17)
Swift3
label.font = UIFont.boldSystemFont(ofSize: 17)
Objective-C
label.font = [UIFont boldSystemFontOfSize:17];
Usa uno stile di testo di tipo dinamico.
La dimensione del carattere e del punto sarà basata sulla dimensione di lettura preferita dell'utente.
veloce
label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
Swift 3
label.font = UIFont.preferredFont(forTextStyle: .body)
Objective-C
label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
Utilizzare un font diverso completamente
veloce
label.font = UIFont(name: "Avenir", size: 15)
Objective-C
label.font = [UIFont fontWithName:@"Avenir" size:15];
Sostituisci la dimensione del carattere
Un modo per impostare la dimensione del font senza conoscere la famiglia di font è usare la proprietà font di UILabel
.
veloce
label.font = label.font.fontWithSize(15)
Swift 3
label.font = label.font.withSize(15)
Objective-C
label.font = [label.font fontWithSize:15];
Usa carattere personalizzato Swift
Fare riferimento a questo link
Numero di linee
Quando si crea un'etichetta e si imposta il testo in modo che sia più di una singola riga che può essere visualizzata, verrà troncata e verrà visualizzata solo una riga di testo che termina con tre punti (...). Ciò è dovuto al fatto che una proprietà denominata numberOfLines
è impostata su 1 e pertanto verrà visualizzata una sola riga. È un errore comune nella gestione di UILabel
, e molte persone pensano che sia un bug, oppure possono usare più di un'etichetta per mostrare più di una riga di testo, ma semplicemente modificando questa proprietà, possiamo dire a una UILabel
di accetta fino al numero specificato di righe. Ad esempio, se questa proprietà è impostata su 5, l'etichetta può mostrare 1, 2, 3, 4 o 5 linee di dati.
Impostazione del valore a livello di codice
Per impostare questa proprietà, assegnagli semplicemente un nuovo numero intero:
veloce
label.numberOfLines = 2
Objective-C
label.numberOfLines = 2;
Nota
È possibile impostare questa proprietà su 0. Tuttavia, ciò non significa che non accetterà alcuna riga, ma significa che l'etichetta può avere tutte le linee necessarie (ovvero "Infinity"):
veloce
label.numberOfLines = 0
Objective-C
label.numberOfLines = 0;
Nota
Se l'etichetta ha un vincolo di altezza, il vincolo verrà rispettato. In questo caso,
label.numberOfLines = 0
potrebbe non funzionare come previsto.
Nota
Per un testo multilinea più complesso, UITextView potrebbe essere più adatto. *
Impostazione del valore in Interface Builder
Invece di impostare numberOfLines
di numberOfLines
, è possibile utilizzare uno Storyboard
o un file .xib
e impostare la proprietà numberOfLines
. In questo modo, otteniamo gli stessi risultati del codice precedente.
Come di seguito:
Dimensioni per adattarsi
Supponiamo che tu abbia un UILabel
sullo storyboard
e che tu abbia creato un IBOutlet
per esso in ViewController.swift
/ ViewController.m
e lo labelOne
.
Per rendere le modifiche facilmente visibili, cambia il backgroundColor
e textColor
di labelOne nel metodo viewDidLoad
:
La funzione sizeToFit
viene utilizzata quando si desidera ridimensionare automaticamente un'etichetta in base al contenuto memorizzato al suo interno.
veloce
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()
Objective-C
labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];
L'output per il codice sopra riportato è:
Come puoi vedere, non vi è alcun cambiamento in quanto il testo si adatta perfettamente a labelOne. sizeToFit cambia solo la cornice dell'etichetta.
Cambiamo il testo in uno leggermente più lungo:
labelOne.text = "Hello, World! I’m glad to be alive!"
Ora, labelOne si presenta così:
Anche chiamare sizeToFit
non cambia nulla. Questo perché, per impostazione predefinita, il numero di linee mostrato da UILabel è impostato su 1. Passiamo a zero sullo storyboard:
Questa volta, quando eseguiamo l'app, labelOne appare correttamente:
La proprietà numberOfLines
può anche essere modificata nel file ViewController
:
// Objective-C
labelOne.numberOfLines = 0;
// Swift
labelOne.numberOfLines = 0
Colore di sfondo
veloce
label.backgroundColor = UIColor.redColor()
label.backgroundColor = .redColor()
Swift 3
label.backgroundColor = UIColor.red
Objective-C
label.backgroundColor = [UIColor redColor];
Aggiungi ombre al testo
veloce
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
Objective-C
label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;
Altezza variabile usando i vincoli
Puoi creare un UILabel
con un'altezza dinamica utilizzando il layout automatico.
È necessario impostare numberOfLines
su zero (0) e aggiungere un'altezza minima impostando un vincolo con una relazione di tipo .GreaterThanOrEqual
sull'attributo .Height
veloce
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
veloce
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true
LineBreakMode
Usando il codice
UILabel.lineBreakMode: NSLineBreakMode
veloce
label.lineBreakMode = .ByTruncatingTail
-
.ByWordWrapping
-
.ByCharWrapping
-
.ByClipping
-
.ByTruncatingHead
-
.ByTruncatingTail
-
.ByTruncatingMiddle
Swift 3
label.lineBreakMode = .byTruncatingTail
-
.byWordWrapping
-
.byCharWrapping
-
.byClipping
-
.byTruncatingHead
-
.byTruncatingTail
-
.byTruncatingMiddle
Objective-C
[label setLineBreakMode:NSLineBreakByTruncatingTail];
-
NSLineBreakByWordWrapping
-
NSLineBreakByCharWrapping
-
NSLineBreakByClipping
-
NSLineBreakByTruncatingHead
-
NSLineBreakByTruncatingTail
-
NSLineBreakByTruncatingMiddle
Usando lo storyboard
Questo può anche essere impostato nell'ispettore attributi di un UILabel:
costanti
- Word Wrapping - il wrapping avviene ai confini delle parole, a meno che la parola stessa non si adatti a una singola riga
- Char Wrapping: il wrapping avviene prima del primo carattere che non si adatta
- Ritaglio: le linee non sono semplicemente disegnate oltre il bordo del contenitore di testo
- Testa troncante - la linea viene visualizzata in modo che la fine si inserisca nel contenitore e il testo mancante all'inizio della linea sia indicato da un glifo con ellissi
- Truncating Tail - la linea viene visualizzata in modo che l'inizio si inserisca nel contenitore e il testo mancante alla fine della linea sia indicato da un glifo con ellissi
- Truncating Middle - la linea viene visualizzata in modo che l'inizio e la fine si inseriscano nel contenitore e il testo mancante nel mezzo sia indicato da un glifo con ellissi
Calcola i limiti di contenuto (per esempio altezze delle celle dinamiche)
Un caso d'uso comune per voler calcolare il fotogramma che un'etichetta occuperà è dimensionare opportunamente le celle della vista tabella. Il modo consigliato per farlo è utilizzare il metodo NSString
boundingRectWithSize:options:attributes:context:
options
prendono le options
disegno per le stringhe:
-
NSStringDrawingUsesLineFragmentOrigin
deve essere utilizzato per le etichette con più righe -
NSStringDrawingTruncatesLastVisibleLine
dovrebbe essere aggiunto utilizzando il carattere|
operatore se ci sono un numero massimo di linee
attributes
è un NSDictionary
di attributi che NSDictionary
sulle stringhe attribuite (lista completa: Apple Docs ) ma i fattori che influenzano l'altezza includono:
NSFontAttributeName : molto importante, la dimensione e la famiglia di caratteri è una parte critica delle dimensioni visualizzate dell'etichetta.
NSParagraphStyleAttributeName : per personalizzare la modalità di visualizzazione del testo. Ciò include l'interlinea, l'allineamento del testo, lo stile di troncamento e alcune altre opzioni. Se non hai modificato esplicitamente nessuno di questi valori, non dovresti preoccuparti di questo, ma potrebbe essere importante se hai attivato alcuni valori su IB.
context
dovrebbe essere nil
poiché il caso d'uso principale di NSStringDrawingContext
è quello di consentire il ridimensionamento del font per adattarlo a un rect specificato, il che non dovrebbe essere il caso se stiamo calcolando un'altezza dinamica.
Obiettivo 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
}
Viceversa, se si dispone di un numero massimo di righe impostato, è necessario innanzitutto calcolare l'altezza di una singola riga per assicurarsi che non si ottenga un valore più alto della dimensione consentita:
// 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;
Etichetta cliccabile
NOTA: nella maggior parte dei casi, è preferibile utilizzare un
UIButton
anziché creare unUILabel
è possibile toccare. Utilizza questo esempio, se sei sicuro, che non vuoi utilizzare unUIButton
per qualche motivo.
- Crea etichetta
- Abilita l'interazione dell'utente
- Aggiungi
UITapGestureRecognizer
La chiave per creare un UILabel
cliccabile è consentire l'interazione dell'utente.
veloce
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];
Impostazione "userInteractionEnabled" nell'ispettore degli attributi dello storyboard
Invece di usare il codice, puoi selezionare l'UILabel all'interno dello storyboard e controllare l'opzione:
Cornice dell'etichetta dinamica dalla lunghezza del testo sconosciuta
A volte dobbiamo ridimensionare un UILabel basato su contenuti dinamici in cui la lunghezza del testo è sconosciuta. In questo esempio, la larghezza di UILabel è fissata a 280 punti e l'altezza è infinita, diciamo 9999. Stima del fotogramma rispetto allo stile del testo e a 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;
veloce
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
Etichetta attribuita testo
01. Sottolineatura del testo: - Linea singola / doppia, Strike Through: - Linea singola / doppia
Passo 1
Seleziona l'etichetta e modifica il tipo di etichetta Pianura su Attribuito
Passo 2
Fai clic sul testo dell'etichetta e fai clic con il pulsante destro del mouse
Passaggio 3
Quindi fare clic su Font -> Mostra caratteri
Passaggio 4
Quindi verrà visualizzata la visualizzazione dei caratteri e fare clic sul pulsante di sottolineatura per rendere il testo sottolineato o fare clic sul pulsante barrato per rendere il testo barrato. E selezionare una riga singola o una doppia linea.
Infine, fai clic su invio e l'etichetta verrà mostrata come sottolineato o barrato in base alla selezione.
02. Aggiungi effetti shaddow / sfocatura dello sfondo del testo
Ottieni la vista Font come sopra descritto e fai clic sul pulsante degli effetti.
Se non vedi l'anteprima clicca l'immagine dello spettacolo nelle impostazioni
Infine cambia shaddow e offset in base alle tue preferenze.
Giustifica il testo
veloce
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];
Etichetta di ridimensionamento automatico per adattarsi al testo
Questo esempio mostra come la larghezza di un'etichetta può ridimensionarsi automaticamente quando il contenuto del testo cambia.
Pin i bordi sinistro e superiore
Basta usare il layout automatico per aggiungere vincoli per bloccare i lati sinistro e superiore dell'etichetta.
Dopo questo ridimensionerà automaticamente.
Gli appunti
Questo esempio deriva da questa risposta di Overflow dello stack .
Non aggiungere vincoli per la larghezza e l'altezza. Le etichette hanno una dimensione intrinseca basata sul loro contenuto testuale.
Non è necessario impostare
sizeToFit
quando si utilizza il layout automatico. Il codice completo per il progetto di esempio è qui: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" } }
- Questo metodo può anche essere utilizzato per spaziare correttamente più etichette in orizzontale come in questo esempio .
- Se vuoi che la tua etichetta
myLabel.preferredMaxLayoutWidth = 150 // or whatever
imposta il numero di linee su 0 in IB e aggiungimyLabel.preferredMaxLayoutWidth = 150 // or whatever
nel codice. (Il pulsante è anche appuntato sul fondo dell'etichetta in modo che si muova verso il basso quando l'altezza dell'etichetta aumenta.)
Ottieni le dimensioni di UILabel in base al testo e al carattere
NSString
fornisce il metodo boundingRectWithSize
che può essere utilizzato per prevedere il CGSize risultante di un UILabel
base al testo e al font senza la necessità di creare un UILabel
Objective-C
[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];
veloce
let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size
veloce
Crea etichetta ed etichetta Uscita vincolo altezza. Aggiungi sotto il codice in cui dovrai assegnare il testo all'etichetta.
@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
Nota: "40" è lo spazio del lato sinistro e destro dello schermo.
Colore del testo evidenziato e evidenziato
Objective-C
UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];
veloce
let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()
Swift 3
let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red