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.

Codezy
la source

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.

Kendall Helmstetter Gelner
la source
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.

Greg
la source
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)

Nathan
la source
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

Naishta
la source
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