Est-il possible de redimensionner automatiquement la zone / les limites UILabel pour s'adapter au texte contenu? (Je m'en fiche s'il finit par être plus grand que l'écran)
Donc, si un utilisateur entre "bonjour" ou "mon nom est vraiment long, je veux qu'il tienne dans cette case", il n'est jamais tronqué et l'étiquette est "élargie" en conséquence?
ios
iphone
objective-c
uilabel
wayneh
la source
la source
Réponses:
S'il vous plaît vérifier mon essentiel où j'ai créé une catégorie pour
UILabel
quelque chose de très similaire, ma catégorie permet d'UILabel
étirer sa hauteur pour afficher tout le contenu: https://gist.github.com/1005520Ou consultez cet article: https://stackoverflow.com/a/7242981/662605
Cela étirerait la hauteur, mais vous pouvez la changer facilement pour travailler dans l'autre sens et étirer la largeur avec quelque chose comme ceci, ce que je crois que vous voulez faire:
Vous pouvez utiliser plus simplement la
sizeToFit
méthode disponible dans laUIView
classe, mais définissez le nombre de lignes sur 1 pour être sûr.Mise à jour iOS 6
Si vous utilisez la mise en page automatique, vous disposez d'une solution intégrée. En définissant le nombre de lignes sur 0, le cadre redimensionnera votre étiquette de manière appropriée (en ajoutant plus de hauteur) pour l'adapter à votre texte.
Mise à jour iOS 8
sizeWithFont:
est obsolète alors utilisezsizeWithAttributes:
plutôt:la source
En utilisant
[label sizeToFit];
, vous obtiendrez le même résultat avec la catégorie Daniels.Bien que je recommande d'utiliser la mise en page automatique et de laisser l'étiquette se redimensionner en fonction des contraintes.
la source
Si nous voulons que cela
UILabel
diminue et s'agrandisse en fonction de la taille du texte, le storyboard avec mise en page automatique est la meilleure option. Voici les étapes pour y parvenirPas
Mettez UILabel dans le contrôleur de vue et placez-le où vous le souhaitez. Également mis
0
pour lanumberOfLines
propriété deUILabel
.Donnez-lui la contrainte de broche d'espacement Haut, Début et Fin.
Update Frame
et cliquez surFix Misplacement
. Maintenant, ce UILabel se rétrécira si le texte est moins et se développera si le texte est plus.la source
Ce n'est pas aussi compliqué que certaines des autres réponses le font.
Épinglez les bords gauche et supérieur
Utilisez simplement la mise en page automatique pour ajouter des contraintes afin d'épingler les côtés gauche et supérieur de l'étiquette.
Après cela, il sera automatiquement redimensionné.
Remarques
Pas besoin de définir
sizeToFit
lors de l'utilisation de la mise en page automatique. Mon code complet pour l'exemple de projet est ici:myLabel.preferredMaxLayoutWidth = 150 // or whatever
du code. (J'ai également épinglé mon bouton au bas de l'étiquette pour qu'il se déplace vers le bas lorsque la hauteur de l'étiquette augmente.)UITableViewCell
consultez cette réponse .la source
Utilisez
[label sizeToFit];
pour ajuster le texte dans UILabella source
J'ai créé quelques méthodes basées sur la réponse de Daniel ci-dessus.
la source
Voici ce que je trouve fonctionne pour ma situation:
1) La hauteur du UILabel a une contrainte> = 0 en utilisant la disposition automatique. La largeur est fixe. 2) Affectez le texte à l'UILabel, qui a déjà une vue supervisée à ce stade (vous ne savez pas à quel point c'est vital). 3) Ensuite, faites:
La hauteur de l'étiquette est maintenant réglée de manière appropriée.
la source
C'est la méthode des catégories. Vous devez d'abord définir le texte, puis appeler cette méthode pour ajuster la hauteur d'UILabel.
la source
Vous pouvez dimensionner votre étiquette en fonction du texte et d'autres contrôles associés de deux manières:
Pour iOS 7.0 et supérieur
avant iOS 7.0, cela pouvait être utilisé pour calculer la taille de l'étiquette
// recadrage d'autres contrôles en fonction de labelTextHeight
Si vous ne souhaitez pas calculer la taille du texte de l'étiquette, vous pouvez utiliser -sizeToFit sur l'instance de UILabel comme-
// après cela, vous pouvez obtenir le cadre d'étiquette pour recadrer d'autres contrôles connexes
la source
[label sizeToFit];
viewDidLoadla source
J'ai eu d'énormes problèmes avec la mise en page automatique. Nous avons deux conteneurs à l'intérieur de la cellule de table. Le deuxième conteneur est redimensionné en fonction de la description de l'élément (0 à 1000 caractères) et la ligne doit être redimensionnée en fonction de ceux-ci.
L'ingrédient manquant était la contrainte inférieure pour la description.
J'ai changé la contrainte inférieure de l'élément dynamique de = 0 à > = 0 .
la source
Convient à chaque fois! :)
la source
vous pouvez afficher une sortie de ligne puis définir la propriété Line = 0 et afficher la sortie de plusieurs lignes, puis définir la propriété Line = 1 et plus
la source
Il y a aussi cette approche:
la source
changeTextWithAutoHeight:width:
méthodeUILabel
. Pourriez-vous fournir un lien vers où dans la documentation UIKit cette méthode peut être trouvée.