web-dev-qa-db-fra.com

UILabel Text Not Wrapping

Je travaille sur un projet Swift avec Storyboards dans lequel je veux que le texte soit intégré à une étiquette. Dans l'ancienne version d'Objective-C où je n'utilisais pas de Storyboard, j'utilisais les paramètres suivants et tout fonctionnait parfaitement.

Objective-C without Storyboard Settings

Voici les paramètres pour Swift

Swift with Storyboard Settings

Je lisais des informations sur les problèmes potentiels de mise en page automatique avec les paramètres de largeur préférés. Je les ai actuellement configurés pour la mise en page automatique et l'étiquette elle-même est définie sur une largeur de 560. J'ai ajouté une contrainte pour conserver l'étiquette à 20 pixels de la vue d'ensemble supérieure et bien que je pensais que cela fonctionnerait, je ne peux toujours pas obtenir le texte emballage. Les paramètres de dimension sont ci-dessous. 

Label Dimension and Constraints

Quelqu'un peut-il expliquer comment faire en sorte que le texte soit bouclé?

23
jonthornham

Tout d'abord, la bonne nouvelle: vous avez défini le libellé sur 2 lignes et Word Wrap. Donc, il peut envelopper. Excellent.

Maintenant, vous devez vous assurer que l'étiquette est assez grande. Indiquez soit la contrainte no height, soit donnez-lui une contrainte de hauteur suffisante pour pouvoir accueillir deux lignes.

Enfin, vous devez limiter sa largeur . C'est ce qui fait que le texte se termine. Si vous ne limitez pas la largeur de l'étiquette, elle continuera de croître vers la droite, voire hors de l'écran. La limite de largeur de l'étiquette arrête cette croissance vers la droite et entraîne le texte en boucle (et l'étiquette grandit plutôt vers le bas).

Vous pouvez limiter la largeur de plusieurs manières. Vous pouvez avoir une contrainte de largeur réelle. Ou vous pouvez avoir une contrainte principale et une contrainte finale, quelque chose de relativement immobile, tel que le superview. Et il existe une troisième possibilité: sur l’inspecteur Taille (que vous indiquez également, en bas à droite de votre question), définissez la largeur préférée (elle est affichée en haut de l’inspecteur Taille): c’est la largeur à laquelle Toutes choses étant égales par ailleurs, l’étiquette cessera de se développer vers la droite et s’enveloppera et s’agrandira au lieu de cela. 

65
matt

Déclarez votre UILabel par programme et donnez

yourUILabel.contentMode = .scaleToFill
yourUILabel.numberOfLines = 0
yourUILabel.leadingMargin(pixel: 10)
yourUILabel.trailingMargin(pixel: 10)

Cela a fonctionné pour moi. 

6
Vignesh raja

Votre texte sera renvoyé à la ligne si vous avez indiqué un nombre de lignes supérieur à 1. Toutefois, vous risquez de ne pas pouvoir le voir se dérouler si la hauteur de l'étiquette ne suffit pas pour afficher le contenu. Je vous suggère de supprimer la contrainte de hauteur ou d'augmenter sa valeur.

1
Aman Jain

Au cas où cela aiderait quelqu'un: j’avais suivi le conseil donné ici de ne pas emballer l’étiquette sur deux lignes mais rien n’avait fonctionné. Ce qui a bien fonctionné pour moi, c’est que j’ai tout d’abord supprimé certaines des contraintes pertinentes du storyboard (j’utilise la mise en page automatique) et que l’étiquette était correctement emballée. J'ai lentement rajouté les contraintes dont j'avais besoin et tout semble encore fonctionner correctement. Donc, supprimer et refaire vos contraintes peut aider.

0
Ed Manning

Ce problème a été résolu en remplaçant le type d'étiquette par "Placeholder" sous Intrinsic Size dans IB. Quand j'ai changé cela, le texte a été emballé et les avertissements ont disparu.

0
jonthornham

Comme je vois ton constructeur d'interface. Il y a deux problèmes. Le premier est avec vos contraintes, et un autre est avec la propriété.

  1. Vous lui avez donné une hauteur fixe, ce qui est faux pendant le retour à la ligne. Vous devez créer l’étiquette de redimensionnement automatique, c’est-à-dire supprimer la hauteur et ajouter la contrainte du bas ou la hauteur de suppression simple dépend de votre situation. Votre texte passe à la ligne suivante, mais à cause d'une contrainte fixe, vous ne pouvez pas le voir.
  2. Vous activez l'option permettant de découper les sous-vues, ce qui est incorrect car elle coupe votre vue et vous ne parvenez pas à afficher le texte intégral.
0
Rehan Ali