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:

Capture d'écran d'Interface Builder

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.

entrer la description de l'image ici

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

iOS 8.2

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

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

Reportez-vous à ce lien

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:

entrer la description de l'image ici

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:

entrer la description de l'image ici

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:

entrer la description de l'image ici

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:

entrer la description de l'image ici

Cette fois, quand nous exécutons l'application, labelOne apparaît correctement:

entrer la description de l'image ici

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;

entrer la description de l'image ici

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

iOS 6

Rapide

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

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:

entrer la description de l'image ici entrer la description de l'image ici

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 un UILabel vous pouvez appuyer. N'utilisez cet exemple que si vous êtes sûr que vous ne voulez pas utiliser un UIButton pour une raison quelconque.

  1. Créer une étiquette
  2. Activer l'interaction avec l'utilisateur
  3. 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:

entrer la description de l'image ici

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é entrer la description de l'image ici entrer la description de l'image ici

Étape 2

Cliquez sur le texte de l'étiquette et cliquez avec le bouton droit

entrer la description de l'image ici

Étape 3

Puis cliquez sur Police -> Afficher les polices

entrer la description de l'image ici

É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.

entrer la description de l'image ici

Enfin, cliquez sur Entrée et l'étiquette sera soulignée ou barrée selon votre sélection.

entrer la description de l'image ici

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.

entrer la description de l'image ici

Si vous ne voyez pas l'aperçu, cliquez sur l'image affichée dans les paramètres

entrer la description de l'image ici

Enfin, changez shaddow et décalez selon vos préférences.

entrer la description de l'image ici

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.

gif animé d'étiquette redimensionnée automatiquement

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.

capture d'écran: configure les contraintes de mise en page automatique

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 .

gif animé montrant le redimensionnement automatique de plusieurs étiquettes

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

capture d'écran: redimensionnement sur plusieurs lignes

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow