135 votes

UILabel ne rétrécit pas automatiquement le texte pour l'adapter à la taille de l'étiquette.

J'ai ce problème étrange, et je le traite depuis plus de 8 heures maintenant Selon la situation, je dois calculer UILabels la taille de façon dynamique,
Par exemple
mon UIViewController reçoit un événement et i change UILabels taille. de plus grand à plus petit. La taille de mon UILabel devient plus petit et j'obtiens la taille correcte nécessaire, mais le texte dans mon UILabel reste la même, la même taille de police, etc. J'ai besoin que la police devienne plus petite, que tout le texte s'adapte à la taille de l'écran. UILabel . La question est donc de savoir comment faire pour que le texte s'adapte à mon étiquette. autoshrinking ou quelque chose comme ça ?

Dans mon xib , UILabels autoshrink est vérifié, également nombre de lignes est fixé à 0, et aussi ma chaîne a des symboles de nouvelle ligne ( \n ), et j'ai sélectionné linebreakmode à wordwrap . Peut-être que quelqu'un s'est trouvé dans la même situation que moi et pourrait m'aider ? Je vous en serais très reconnaissant.

Merci d'avance !

EDITAR: UILabel la taille minimale de la police est fixée à 10

0 votes

Quelle est la taille minimale de votre police pour l'étiquette que vous définissez s'il vous plaît ajouter.

0voto

Kumar KL Points 4272

Dans le UIStoryBoard il suffit d'alterner ici pour connaître les exigences.

enter image description here

PRogrammatically :

myLabel.adjustsFontSizeToFitWidth = YES;
myLabel.minimumScaleFactor = 0.4f; // Chnage as your need

0voto

Justin Whitney Points 930

J'arrive tard dans la soirée, mais comme j'avais l'obligation supplémentaire d'avoir un mot par ligne, cet ajout a fait l'affaire pour moi :

label.numberOfLines = [labelString componentsSeparatedByString:@" "].count;

Apple Docs dites :

Normalement, le texte de l'étiquette est dessiné avec la police que vous spécifiez dans la propriété de la police. Toutefois, si cette propriété a la valeur YES et que le texte de la propriété text dépasse le rectangle de délimitation de l'étiquette, le récepteur commence à réduire la taille de la police jusqu'à ce que la chaîne s'adapte ou que la taille minimale de la police soit atteinte. Dans iOS 6 et les versions antérieures, cette propriété n'est effective que lorsque la propriété numberOfLines est définie sur 1.

Mais c'est un mensonge. Un mensonge, je vous le dis ! C'est vrai pour toutes les versions d'iOS. Plus précisément, c'est vrai lorsque vous utilisez un UILabel dans un UICollectionViewCell pour lesquels la taille est déterminée par des contraintes ajustées dynamiquement au moment de l'exécution via une mise en page personnalisée (ex. self.menuCollectionViewLayout.itemSize = size ).

Ainsi, lorsqu'il est utilisé en conjonction avec adjustsFontSizeToFitWidth y minimumScaleFactor comme mentionné dans les réponses précédentes, en définissant de manière programmatique les paramètres de la numberOfLines basé sur le nombre de mots a résolu le problème de l'auto-rétraction. Faire quelque chose de similaire en se basant sur le nombre de mots ou même de caractères pourrait produire une solution "assez proche".

-1voto

Mongi Zaidi Points 159

Voici comment je procède :

label.adjustsFontSizeToFitWidth = YES;
label.minimumScaleFactor = 0.5f;//change to your scale, the smaller the scale is the smaller the text gets when it's autoshrinking

-1voto

Naishta Points 5026

Swift 4, Xcode 9.4.1

La solution qui a fonctionné pour moi : J'avais un étiquette dans une cellule de vue de collection et le texte de l'étiquette a été coupé. Définissez les attributs comme ci-dessous sur le Storyboard

Lines = 0
LineBreak = Word Wrap
Set yourlabel's leading and trailing constraint = 0 (using Autolayout)

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