UILabel - Texte de Wordwrap


150

Existe-t-il un moyen d'avoir une étiquette de texte Wordwrap au besoin? J'ai les sauts de ligne définis sur word wrap et l'étiquette est assez haute pour deux lignes, mais il semble qu'elle ne sera enveloppée que sur les sauts de ligne. Dois-je ajouter des sauts de ligne pour qu'il s'enroule correctement? Je veux juste qu'il s'enroule s'il ne peut pas le rentrer horizontalement.

Réponses:


301

Si vous définissez numberOfLinessur 0 (et l'étiquette sur word wrap), l'étiquette sera automatiquement enveloppée et utilisera autant de lignes que nécessaire.

Si vous modifiez un UILabeldans IB, vous pouvez entrer plusieurs lignes de texte en appuyant sur option+ return pour obtenir un saut de ligne - returnseul finira l'édition.


124
Pour clarifier pour les noobs comme moi, ce serait: cell.textLabel.numberOfLines = 0; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
Brian Moeskau

46
Dans iOS 6 et versions ultérieures, utilisez NSLineBreakByWordWrapping, pas UILineBreakModeWordWrap.
Aaron Brager

3
Vous pourriez également avoir besoin des éléments suivants: label.autoresizingMask = UIViewAutoresizingFlexibleHeight;
William Grand

6
label.lineBreakMode = .ByWordWrappinget label.numberOfLines = 0en swift
AFraser

9
Pour tous ceux à qui cela n'était pas évident (comme moi): Le UILabel doit avoir une sorte de limite sur sa largeur (soit à partir d'une contrainte de largeur réelle ou de contraintes de marge); sinon il ne s'enroulera pas.
jcady

27

UILabela une propriété lineBreakModeque vous pouvez définir selon vos besoins.


11
"J'ai les sauts de ligne réglés sur word wrap". Cela ne s'applique qu'aux sauts de ligne réels, il ne se cassera pas automatiquement une fois qu'il sera trop long.
Codezy le

19

Dans Swift, vous le feriez comme ceci:

    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.numberOfLines = 0

(Notez que le fonctionnement de la constante lineBreakMode est différent de celui d'ObjC)


Voulez-vous expliquer en quoi c'est différent?
Mike

Je pense que je voulais simplement dire que la dénomination est différente. Cela a probablement changé à nouveau dans swift3
Nathan

Le mode de saut de ligne doit être défini sur le retour à la ligne par défaut
MobileMon

@MobileMonin mon expérience ce n'est pas toujours le cas. Peut-être que l'IB le change dans certaines circonstances?
Nathan

label.lineBreakMode = NSLineBreakByWordWrapping in Obj C
Nupur Sharma

2

Xcode 10, Swift 4

L'habillage du texte pour une étiquette peut également être effectué sur Storyboard en sélectionnant l'étiquette et en utilisant l'inspecteur d'attributs.

Lignes = 0 LineBreak = retour à la ligne

entrez la description de l'image ici


2
En utilisant une étiquette branBrand-New, en l'ajoutant directement à la vue, cela génère toujours une étiquette sur une seule ligne (avec une largeur supérieure à la largeur du téléphone) pour moi, malgré la définition des lignes sur 0 et le saut de ligne sur Word Wrap. Y a-t-il un autre paramètre qui pourrait être nécessaire? Dois-je joindre un code supplémentaire?
phihag
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.