478 votes

Plusieurs lignes de texte dans UILabel

Existe-t-il un moyen d'avoir plusieurs lignes de texte dans un fichier UILabel comme dans le UITextView ou dois-je utiliser le second à la place ?

Merci.

5 votes

Notez que UILineBreakModeWordWrap a été déprécié dans iOS 6. Vous devez maintenant utiliser NSLineBreakByWordWrapping = 0 Voir la documentation ici

0 votes

Vérifiez cette question stackoverflow.com/questions/2312899/

843voto

Ilya Suzdalnitski Points 13896

J'ai trouvé une solution.

Il suffit d'ajouter le code suivant :

textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;

Restauration de l'ancienne réponse (pour référence et pour les développeurs désireux de prendre en charge les iOS inférieurs à 6.0) :

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

A côté de cela, les deux valeurs de l'énumération donnent lieu à 0 de toute façon.

20 votes

UILineBreakModeWordWrap est en fait la valeur par défaut, donc vous n'avez pas besoin de la première ligne.

1 votes

Pour ceux qui utilisent Swift : cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping et cell.textLabel?.numberOfLines = 0

6 votes

Merci de fournir également Xamarin-Code. L'autocomplétion n'a pas fonctionné car ils ont choisi d'abréger cette propriété... +1

149voto

Dans IB, définissez le nombre de lignes à 0 (permet un nombre illimité de lignes).

Lorsque vous tapez dans le champ de texte à l'aide de IB, utilisez "alt-return" pour insérer un retour et passer à la ligne suivante (ou vous pouvez copier du texte déjà séparé par des lignes).

1 votes

(Alors qu'il déterre sciemment un fil de discussion vieux de plus d'un an ) Il y a une chose que j'aimerais parfois pouvoir faire dans l'IB, c'est saisir du texte sans intégrer des sauts de ligne, définir UILineBreakModeWordWrap et numberOfLines = 0, puis faire en sorte que l'étiquette s'adapte automatiquement à la hauteur, tout en continuant à concevoir dans IB. Je pense au cas où la vue est redimensionnée en paysage, où les sauts de ligne dans l'étiquette pourraient être problématiques. Ou bien... Je pourrais être en train de mal utiliser IB ! Peut-être que le fait que les étiquettes s'ajustent automatiquement dans IB cause plus de problèmes qu'il n'en résout ? (De plus, vous ne pouvez pas invoquer sizeToFit à ce stade de toute façon).

1 votes

Le "0" provient des documents relatifs à UILabel, le retour alt d'un ami qui utilise Interface Builder depuis de nombreuses années.

3 votes

+1 pour être la seule réponse à mentionner "alt-return". En particulier, "ctrl-return" semble devoir fonctionner mais ne fonctionne pas.

57voto

La meilleure solution que j'ai trouvée (à un problème autrement frustrant qui aurait dû être résolu dans le framework) est similaire à celle de vaychick.

Il suffit de fixer le nombre de lignes à 0 dans l'IB ou le code.

myLabel.numberOfLines = 0;

Cela affichera les lignes nécessaires mais repositionnera l'étiquette de manière à ce qu'elle soit centrée horizontalement (de sorte qu'une étiquette de 1 ligne et de 3 lignes soit alignée dans sa position horizontale). Pour corriger cela, ajoutez :

CGRect currentFrame = myLabel.frame;
CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; 
currentFrame.size.height = expected.height;
myLabel.frame = currentFrame;

0 votes

Résoudre ma question avec l'aide de vous et de @Ilya Suzdalnitski. Merci beaucoup.

24voto

Moorthy The Boss Points 1008
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];

18voto

Si vous devez utiliser le :

myLabel.numberOfLines = 0;

vous pouvez également utiliser un saut de ligne standard ("\n") dans le code, pour forcer une nouvelle ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X