Recherche…
Introduction
La classe UILabel implémente une vue texte en lecture seule. Vous pouvez utiliser cette classe pour dessiner une ou plusieurs lignes de texte statique, telles que celles que vous pourriez utiliser pour identifier d'autres parties de votre interface utilisateur. La classe UILabel de base prend en charge le style simple et complexe du texte d'étiquette. Vous pouvez également contrôler les aspects de l'apparence, par exemple si l'étiquette utilise une ombre ou dessine avec une surbrillance. Si nécessaire, vous pouvez personnaliser l'apparence de votre texte en procédant à une sous-classification.
Syntaxe
- UILabel.numberOfLines: Int // obtient ou définit le nombre maximum de lignes que l'étiquette peut avoir. 0 est illimité
- UILabel.text: String? // récupère ou définit le texte affiché par l'étiquette
- UILabel.textColor: UIColor! // obtenir ou définir la couleur du texte sur l'étiquette
- UILabel.tintColor: UIColor! // obtenir ou définir la couleur de teinte de l'étiquette
- UILabel.attributedText: NSAttributedString? // récupère ou définit le texte attribué de l'étiquette
- UILabel.font: UIFont! // récupère ou définit la police du texte sur l'étiquette
- UILabel.textAlignment: NSTextAlignment // obtient ou définit l'alignement du texte
Remarques
Les UILabels sont des vues pouvant être utilisées pour afficher une ou plusieurs lignes de texte. Il contient plusieurs manières de styliser du texte, telles que des ombres, des couleurs de texte et des polices.
Les UILabels peuvent également afficher des chaînes attribuées, qui sont du texte + balisage en ligne pour appliquer des styles à des parties du texte.
UILabel n'est pas conforme au protocole UIAppearance. Par conséquent, vous ne pouvez pas utiliser les méthodes proxy UIAppearance pour personnaliser l'apparence de UILabels. Voir cette discussion pour plus.
Référence du développeur Apple ici
Modification du texte dans une étiquette existante
UILabel
pouvez modifier le texte d'un UILabel
existant en accédant et en modifiant la propriété text
de l' UILabel
. Cela peut être fait directement en utilisant des littéraux String
ou indirectement en utilisant des variables.
Définition du texte avec des littéraux de String
Rapide
label.text = "the new text"
Objectif c
// Dot Notation
label.text = @"the new text";
// Message Pattern
[label setText:@"the new text"];
Définition du texte avec une variable
Rapide
let stringVar = "basic String var"
label.text = stringVar
Objectif c
NSString * stringVar = @"basic String var";
// Dot Notation
label.text = stringVar;
// Message Pattern
[label setText: stringVar];
Couleur du texte
Vous pouvez utiliser la propriété textColor
l'étiquette pour appliquer une couleur de texte au texte entier de l'étiquette.
Rapide
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)
Objectif 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];
Appliquer une couleur de texte à une partie du texte
Vous pouvez également varier la couleur du texte (ou d'autres attributs) de parties du texte en utilisant NSAttributedString
:
Objectif 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;
Rapide
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
Alignement du texte
Rapide
label.textAlignment = NSTextAlignment.left
//or the shorter
label.textAlignment = .left
Toute valeur dans le NSTextAlignment
ENUM est valide: .left
, .center
, .right
, .justified
, .natural
Objectif c
label.textAlignment = NSTextAlignmentLeft;
Toute valeur de l'énumération NSTextAlignment
est valide: NSTextAlignmentLeft
, NSTextAlignmentCenter
, NSTextAlignmentRight
, NSTextAlignmentJustified
, NSTextAlignmentNatural
L'alignement vertical dans UILabel
n'est pas pris en charge: alignez verticalement le texte sur le dessus dans un UILabel
Créer un UILabel
Avec un cadre
Lorsque vous connaissez les dimensions exactes que vous souhaitez définir pour votre étiquette, vous pouvez initialiser une UILabel
avec un cadre CGRect
.
Rapide
let frame = CGRect(x: 0, y: 0, width: 200, height: 21) let label = UILabel(frame: frame) view.addSubview(label)
Objectif c
CGRect frame = CGRectMake(0, 0, 200, 21); UILabel *label = [[UILabel alloc] initWithFrame:frame]; [view addSubview:label];
Avec mise en page automatique
Vous pouvez ajouter des contraintes sur un UILabel
lorsque vous souhaitez UILabel
calcule dynamiquement son cadre à l'exécution.
Rapide
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) ])
Objectif c
UILabel *label = [[UILabel alloc] init];
Avec 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 documentation de VFL peut être trouvée ici
Une fois l'étiquette créée, veillez à définir les dimensions via Mise en forme automatique. Xcode affichera les erreurs s'il est mal fait.
Avec Interface Builder
Vous utilisez également Interface Builder pour ajouter un UILabel
à votre fichier Storyboard
ou .xib
en faisant glisser une Label
du panneau Bibliothèque d'objets et en la déposant dans une vue du canevas:
Au lieu de spécifier un cadre (position et taille) pour un UILabel
programme, un Storyboard
ou un .xib
vous permet d'utiliser Auto Layout pour ajouter des contraintes au contrôle.
Pour accéder à cette étiquette créée à partir de storyboard
ou de xib
créez un IBOutlet de cette étiquette.
Liaison entre Interface Builder et View Controller
Une fois que vous avez ajouté un UILabel
à votre Storyboard
ou .xib
le fichier, vous pouvez le lier à votre code en appuyant sur Control ⌃
, puis en faisant glisser la souris entre UILabel
et votre ViewController
. ont le même effet.
Dans la boîte de dialogue des propriétés, vous pouvez définir le nom de UILabel
et le définir comme strong
ou weak
. Pour plus d'informations sur strong
et weak
, voir ceci ,
L'autre solution consiste à faire en sorte que le point de vente soit programmé comme suit:
Rapide
@IBOutlet weak var nameLabel : UILabel!
Objectif c
@property (nonatomic, weak) IBOutlet UILabel *nameLabel;
Définir la police
Rapide
let label = UILabel()
Objectif c
UILabel *label = [[UILabel alloc] init];
or
UILabel *label = [UILabel new]; // convenience method for calling alloc-init
Changer la taille de la police par défaut
Rapide
label.font = UIFont.systemFontOfSize(17)
Swift 3
label.font = UIFont.systemFont(ofSize: 17)
Objectif c
label.font = [UIFont systemFontOfSize:17];
Utiliser un poids de police spécifique
Rapide
label.font = UIFont.systemFontOfSize(17, weight: UIFontWeightBold)
Swift3
label.font = UIFont.systemFont(ofSize: 17, weight: UIFontWeightBold)
Objectif c
label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightBold];
Rapide
label.font = UIFont.boldSystemFontOfSize(17)
Swift3
label.font = UIFont.boldSystemFont(ofSize: 17)
Objectif c
label.font = [UIFont boldSystemFontOfSize:17];
Utilisez un style de texte de type dynamique.
La taille de la police et du point dépendra de la taille de lecture préférée de l'utilisateur.
Rapide
label.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
Swift 3
label.font = UIFont.preferredFont(forTextStyle: .body)
Objectif c
label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
Utilisez une police différente tout à fait
Rapide
label.font = UIFont(name: "Avenir", size: 15)
Objectif c
label.font = [UIFont fontWithName:@"Avenir" size:15];
Remplacer la taille de la police
Un moyen de définir la taille de la police sans connaître la famille de polices consiste à utiliser la propriété font de UILabel
.
Rapide
label.font = label.font.fontWithSize(15)
Swift 3
label.font = label.font.withSize(15)
Objectif c
label.font = [label.font fontWithSize:15];
Utilisez la police personnalisée Swift
Nombre de lignes
Lorsque vous créez une étiquette et définissez son texte pour qu'il soit plus qu'une seule ligne pouvant être affichée, celle-ci sera tronquée et vous ne verrez qu'une seule ligne de texte se terminant par trois points (...). En effet, une propriété appelée numberOfLines
est définie sur 1 et, par conséquent, une seule ligne sera affichée. C'est une erreur courante dans le traitement de UILabel
, et beaucoup de gens le considèrent comme un bogue, ou ils peuvent utiliser plus d'une étiquette pour afficher plus qu'une ligne de texte, mais en éditant cette propriété, on peut dire à un UILabel
accepter jusqu'au nombre de lignes spécifié. Par exemple, si cette propriété est définie sur 5, l'étiquette peut afficher 1, 2, 3, 4 ou 5 lignes de données.
Définition de la valeur par programmation
Pour définir cette propriété, affectez-lui simplement un nouvel entier:
Rapide
label.numberOfLines = 2
Objectif c
label.numberOfLines = 2;
Remarque
Il est possible de définir cette propriété sur 0. Cependant, cela ne signifie pas qu'elle n'acceptera aucune ligne, mais que l'étiquette peut avoir autant de lignes que nécessaire (aka "Infinity"):
Rapide
label.numberOfLines = 0
Objectif c
label.numberOfLines = 0;
Remarque
Si l'étiquette a une contrainte de hauteur, la contrainte sera respectée. Dans ce cas,
label.numberOfLines = 0
peut ne pas fonctionner comme prévu.
Remarque
Pour un texte multi-lignes plus complexe, UITextView peut être plus adapté. *
Définition de la valeur dans le générateur d'interface
Au lieu de définir numberOfLines
programmation, vous pouvez utiliser un Storyboard
ou un .xib
et définir la propriété numberOfLines
. De cette façon, nous obtenons les mêmes résultats que le code ci-dessus.
Comme ci-dessous:
Taille pour s'adapter
Supposons que vous ayez un UILabel
sur votre storyboard
et que vous ayez créé un IBOutlet
dans ViewController.swift
/ ViewController.m
et l' ViewController.m
nommé labelOne
.
Pour rendre les modifications facilement visibles, modifiez les textColor
backgroundColor
et textColor
de labelOne dans la méthode viewDidLoad
:
La fonction sizeToFit
est utilisée lorsque vous souhaitez redimensionner automatiquement une étiquette en fonction du contenu stocké.
Rapide
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()
Objectif c
labelOne.backgroundColor = [UIColor blueColor];
labelOne.textColor = [UIColor whiteColor];
labelOne.text = @"Hello, World!";
[labelOne sizeToFit];
La sortie du code ci-dessus est:
Comme vous pouvez le voir, il n'y a pas de changement car le texte est parfaitement adapté à labelOne. sizeToFit ne modifie que le cadre de l'étiquette.
Changeons le texte en un peu plus long:
labelOne.text = "Hello, World! I’m glad to be alive!"
Maintenant, labelOne ressemble à ceci:
Même appeler sizeToFit
ne change rien. En effet, par défaut, le NumberOfLines indiqué par UILabel est défini sur 1. Changeons-le en zéro sur le storyboard:
Cette fois, quand nous exécutons l'application, labelOne apparaît correctement:
La propriété numberOfLines
peut également être modifiée dans le fichier ViewController
:
// Objective-C
labelOne.numberOfLines = 0;
// Swift
labelOne.numberOfLines = 0
Couleur de fond
Rapide
label.backgroundColor = UIColor.redColor()
label.backgroundColor = .redColor()
Swift 3
label.backgroundColor = UIColor.red
Objectif c
label.backgroundColor = [UIColor redColor];
Ajouter des ombres au texte
Rapide
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
Objectif c
label1.layer.shadowOffset = CGSizeMake(3, 3);
label1.layer.shadowOpacity = 0.7;
label1.layer.shadowRadius = 2;
Hauteur variable en utilisant des contraintes
Vous pouvez créer une UILabel
avec une hauteur dynamique en utilisant la mise en page automatique.
Vous devez définir le numberOfLines
à zéro (0) et ajouter une hauteur minimale en définissant une contrainte avec une relation de type .GreaterThanOrEqual
sur l'attribut .Height
Rapide
label.numberOfLines = 0
let heightConstraint = NSLayoutConstraint(
item: label,
attribute: .Height,
relatedBy: .GreaterThanOrEqual,
toItem: nil,
attribute: .NotAnAttribute,
multiplier: 0,
constant: 20
)
label.addConstraint(heightConstraint)
Rapide
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.heightAnchor.constraintGreaterThanOrEqualToConstant(20).active = true
LineBreakMode
En utilisant du code
UILabel.lineBreakMode: NSLineBreakMode
Rapide
label.lineBreakMode = .ByTruncatingTail
-
.ByWordWrapping
-
.ByCharWrapping
-
.ByClipping
-
.ByTruncatingHead
-
.ByTruncatingTail
-
.ByTruncatingMiddle
Swift 3
label.lineBreakMode = .byTruncatingTail
-
.byWordWrapping
-
.byCharWrapping
-
.byClipping
-
.byTruncatingHead
-
.byTruncatingTail
-
.byTruncatingMiddle
Objectif c
[label setLineBreakMode:NSLineBreakByTruncatingTail];
-
NSLineBreakByWordWrapping
-
NSLineBreakByCharWrapping
-
NSLineBreakByClipping
-
NSLineBreakByTruncatingHead
-
NSLineBreakByTruncatingTail
-
NSLineBreakByTruncatingMiddle
Utiliser le storyboard
Cela peut également être défini dans l'inspecteur d'attributs d'une étiquette UIL:
Les constantes
- Word Wrapping - le retour à la ligne se produit aux limites des mots, à moins que le mot lui-même ne tienne sur une seule ligne
- Char Wrapping - l'emballage commence avant le premier caractère qui ne correspond pas
- Clipping - les lignes ne sont simplement pas dessinées au-delà du bord du conteneur de texte
- Troncature de la tête - la ligne est affichée de sorte que la fin s’insère dans le conteneur et que le texte manquant au début de la ligne est indiqué par un glyphe de points de suspension
- Tronquer la queue - la ligne est affichée de sorte que le début s’insère dans le conteneur et le texte manquant à la fin de la ligne est indiqué par un glyphe de points de suspension
- Troncature du milieu - la ligne est affichée de sorte que le début et la fin tiennent dans le conteneur et que le texte manquant au milieu soit indiqué par un glyphe à points de suspension
Calculer les limites de contenu (c.-à-d. Hauteurs de cellules dynamiques)
Un cas d'utilisation courant pour vouloir calculer la trame qu'une étiquette va prendre est de dimensionner les cellules de vue de table de manière appropriée. La méthode recommandée consiste à utiliser la méthode NSString
boundingRectWithSize:options:attributes:context:
options
prend les options
dessin de chaîne:
-
NSStringDrawingUsesLineFragmentOrigin
doit être utilisé pour les étiquettes comportant plusieurs lignes -
NSStringDrawingTruncatesLastVisibleLine
devrait être ajouté en utilisant le|
opérateur s'il y a un nombre maximum de lignes
attributes
est un NSDictionary
d'attributs qui NSDictionary
chaînes attribuées (liste complète: Apple Docs ), mais les facteurs qui affectent la hauteur sont les suivants:
NSFontAttributeName : Très important, la taille et la famille de polices constituent une partie critique de la taille affichée de l'étiquette.
NSParagraphStyleAttributeName : permet de personnaliser l'affichage du texte. Cela inclut l'interligne, l'alignement du texte, le style de troncature et quelques autres options. Si vous n'avez modifié explicitement aucune de ces valeurs, vous ne devriez pas avoir à vous soucier de cela, mais cela peut être important si vous modifiez certaines valeurs sur IB.
context
doit être nil
puisque le cas d'utilisation principal de NSStringDrawingContext
permet à la police de redimensionner pour correspondre à un rect spécifié, ce qui ne devrait pas être le cas si nous calculons une hauteur dynamique.
Objectif 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
}
À l'inverse, si vous avez défini un nombre maximum de lignes, vous devrez d'abord calculer la hauteur d'une seule ligne pour vous assurer de ne pas obtenir une valeur supérieure à la taille autorisée:
// 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;
Label cliquable
REMARQUE: Dans la plupart des cas, il est préférable d'utiliser un
UIButton
au lieu de créer unUILabel
vous pouvez appuyer. N'utilisez cet exemple que si vous êtes sûr que vous ne voulez pas utiliser unUIButton
pour une raison quelconque.
- Créer une étiquette
- Activer l'interaction avec l'utilisateur
- Ajouter
UITapGestureRecognizer
La clé pour créer un UILabel
cliquable UILabel
à activer l'interaction de l'utilisateur.
Rapide
let label = UILabel()
label.userInteractionEnabled = true
let gesture = UITapGestureRecognizer(target: self, action: #selector(labelClicked(_:)))
label.addGestureRecognizer(gesture)
Objectif c
UILabel *label = [[UILabel alloc] init];
[label setUserInteractionEnabled:YES];
UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[label addGestureRecognizer:gesture];
Définition de "userInteractionEnabled" dans l'inspecteur des attributs du storyboard
Au lieu d'utiliser le code, vous pouvez sélectionner le UILabel dans le storyboard et cocher l'option:
Cadre d'étiquette dynamique de longueur de texte inconnue
Parfois, nous devons redimensionner un UILabel en fonction d'un contenu dynamique dont la longueur du texte est inconnue. Dans cet exemple, la largeur de UILabel est fixée à 280 points et la hauteur est infinie, disons 9999. Estimation de l'image par rapport au style de texte et à maximumLabelSize.
Objectif 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;
Rapide
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
Texte d'attribut d'étiquette
01. Texte souligné: - Ligne simple / double, barré: - Ligne simple / double
Étape 1
Sélectionnez l'étiquette et changez le type d'étiquette Plain en Attribué
Étape 2
Cliquez sur le texte de l'étiquette et cliquez avec le bouton droit
Étape 3
Puis cliquez sur Police -> Afficher les polices
Étape 4
Ensuite, la vue de la police apparaîtra et cliquera sur le bouton de soulignement pour souligner le texte ou cliquer sur le bouton barré pour que le texte soit barré.Et sélectionnez une ligne simple ou double.
Enfin, cliquez sur Entrée et l'étiquette sera soulignée ou barrée selon votre sélection.
02. Ajouter du texte shaddow / effets de flou d'arrière-plan
Obtenez la vue Police comme décrit ci-dessus et cliquez sur le bouton Effets.
Si vous ne voyez pas l'aperçu, cliquez sur l'image affichée dans les paramètres
Enfin, changez shaddow et décalez selon vos préférences.
Justifier le texte
Rapide
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)
Objectif 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];
Etiquette de taille automatique pour adapter le texte
Cet exemple montre comment la largeur d'une étiquette peut être redimensionnée automatiquement lorsque le contenu du texte change.
Pin les bords gauche et supérieur
Utilisez simplement la mise en page automatique pour ajouter des contraintes à épingler les côtés gauche et supérieur de l'étiquette.
Après cela, il sera automatiquement redimensionné.
Remarques
Cet exemple provient de cette réponse Stack Overflow .
N'ajoutez pas de contraintes pour la largeur et la hauteur. Les étiquettes ont une taille intrinsèque basée sur leur contenu textuel.
Pas besoin de définir
sizeToFit
lors de l'utilisation de la mise en page automatique. Le code complet pour l'exemple de projet est ici: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" } }
- Cette méthode peut également être utilisée pour espacer correctement plusieurs étiquettes horizontalement, comme dans cet exemple .
- Si vous souhaitez que votre étiquette soit alignée, définissez le nombre de lignes sur 0 dans IB et ajoutez
myLabel.preferredMaxLayoutWidth = 150 // or whatever
dans le code. (Le bouton est également épinglé au bas de l’étiquette pour qu’il se déplace vers le bas lorsque la hauteur de l’étiquette augmente.)
Obtenir la taille de UILabel strictement basée sur son texte et sa police
NSString
fournit la méthode boundingRectWithSize
qui peut être utilisée pour prédire la taille CGS résultante d'un UILabel
fonction de son texte et de sa police sans qu'il soit nécessaire de créer un UILabel
Objectif c
[[text boundingRectWithSize:maxSize options:(NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName: fontName} context:nil] size];
Rapide
let nsText = text as NSString?
nsText?.boundingRectWithSize(maxSize, options: [.TruncatesLastVisibleLine, .UsesLineFragmentOrigin], attributes: [NSFontAttributeName: fontName], context: nil).size
Rapide
Créer une étiquette et une étiquette Ajoutez le code ci-dessous où vous allez assigner du texte à l'étiquette.
@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
Note: "40" est l'espace des côtés gauche et droit de l'écran.
Couleur de texte surlignée et mise en évidence
Objectif c
UILabel *label = [[UILabel alloc] init];
label.highlighted = YES;
label.highlightedTextColor = [UIColor redColor];
Rapide
let label = UILabel()
label.highlighted = true
label.highlightedTextColor = UIColor.redColor()
Swift 3
let label = UILabel()
label.isHighlighted = true
label.highlightedTextColor = UIColor.red