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.

180voto

lester Points 581

Si vous êtes toujours à la recherche d'une meilleure solution, je pense que c'est ce que vous recherchez :

Une valeur booléenne indiquant si la taille de la police doit être réduite afin de faire tenir la chaîne de titre dans le rectangle de délimitation de l'étiquette (cette propriété n'est effective que lorsque la propriété numberOfLines a la valeur 1).

Lorsque vous définissez cette propriété, minimumScaleFactor DOIT être défini aussi (un bon défaut est 0.5).

Swift

var adjustsFontSizeToFitWidth: Bool { get set }

Objectif-C

@property(nonatomic) BOOL adjustsFontSizeToFitWidth;

Une valeur booléenne indiquant si l'espacement entre les lettres doit être ajusté pour faire tenir la chaîne dans le rectangle de délimitation de l'étiquette.

Swift

var allowsDefaultTighteningForTruncation: Bool { get set }

Objectif-C

@property(nonatomic) BOOL allowsDefaultTighteningForTruncation;

Source : .

20 votes

En guise d'aparté, minimumFontSize est déprécié dans iOS 6.0. Utilisez minimumScaleFactor à la place.

0 votes

Merci pour votre aide, mais j'ai essayé et ça n'a rien donné. Il semble que le rétrécissement automatique ne fonctionne pas pour les lignes multiples. Mais je ne comprends pas pourquoi c'est comme ça

15 votes

Oui, la réduction automatique ne fonctionne pas pour les lignes multiples dans UILabel. Essayez d'imaginer ceci : vous avez un texte de plusieurs lignes, vous voulez le réduire pour qu'il "s'adapte" à la largeur. Il faut alors réduire tout le texte pour qu'il tienne sur une seule ligne, ou bien les mots restent sur la même ligne et sont réduits pour s'adapter à chaque largeur ? Ce dernier cas est le plus courant, mais n'oubliez pas que les mots sont également configurés pour s'organiser sur plusieurs lignes. Même si la disposition automatique du texte est désactivée, vous devrez faire face à des lignes de texte ayant une taille de police différente, car tous les mots ne s'adaptent pas à la largeur.

132voto

ohho Points 17243

C'est ainsi que j'obtiens UILabel Autoshrink (notamment pour la hauteur de la police de l'étiquette qui s'adapte à l'appareil 4s à partir du Storyboard 6s Plus) dans iOS 9.2, Xcode 7.2 ...

enter image description here

  • Le nombre de lignes est de 0
  • Sauts de ligne : Clip
  • Rétrécissement automatique : Échelle de police minimale 0,25

85voto

minimumFontSize est déprécié dans iOS 6.

Alors utilisez minimumScaleFactor au lieu de minmimumFontSize .

lbl.adjustsFontSizeToFitWidth = YES
lbl.minimumScaleFactor = 0.5

Swift 5

lbl.adjustsFontSizeToFitWidth = true
lbl.minimumScaleFactor = 0.5

24voto

loki-e Points 1

Ma solution est également le booléen label.adjustsFontSizeToFitWidth = YES ; MAIS, dans l'interface Builder, il faut que l'habillage des mots passe à " CLIP ". Puis rétrécir automatiquement les étiquettes. C'est très important.

3 votes

Ce n'est que lorsque je suis passé de "Word Wrap" à "Clip" que Autoshrink a fonctionné pour moi.

0 votes

Lorsque j'ai remplacé le retour à la ligne par le clip, j'ai réussi à le faire redimensionner dans une étiquette de zéro ligne. Ce serait bien si cela était documenté.

13voto

Naloiko Eugene Points 219

Dans Swift 3 (de manière programmatique), j'ai dû faire cela :

let lbl = UILabel()
lbl.numberOfLines = 0
lbl.lineBreakMode = .byClipping
lbl.adjustsFontSizeToFitWidth = true
lbl.minimumScaleFactor = 0.5
lbl.font = UIFont.systemFont(ofSize: 15)

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