J'ai actuellement un UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
Tout au long de la vie de mon application iOS, factLabel
obtient un tas de valeurs différentes. Certains avec plusieurs phrases, d'autres avec seulement 5 ou 6 mots.
Comment puis-je configurer le UILabel
pour que la taille de la police change afin que le texte tienne toujours dans les limites que j'ai définies?
ios
objective-c
fonts
uilabel
CodeGuy
la source
la source
Réponses:
Une seule ligne:
Le code ci-dessus ajustera la taille de la police de votre texte à (par exemple)
8
essayer d'adapter votre texte dans l'étiquette.numberOfLines = 1
est obligatoire.Plusieurs lignes:
Car
numberOfLines > 1
il existe une méthode pour déterminer la taille du texte final grâce aux méthodes d' addition sizeWithFont: ... UIKit de NSString , par exemple:Après cela, vous pouvez simplement redimensionner votre étiquette en utilisant le résultat
lLabelSize
, par exemple (en supposant que vous ne changerez que la hauteur de l'étiquette):iOS6
Une seule ligne:
Depuis iOS6,
minimumFontSize
est obsolète. La lignepeut être changé en:
IOS 7
Plusieurs lignes:
À partir d'iOS7,
sizeWithFont
devient obsolète. Le cas multiligne est réduit à:iOS 13 (Swift 5):
la source
sizeWithFont:constrainedToSize:lineBreakMode:
Mais cette façon est un peu difficilemyLabel.minimumScaleFactor:10.0/[UIFont labelFontSize];
minimumFontSize
est obsolète avec iOS 6. Vous pouvez utiliserminimumScaleFactor
.Cela prendra soin de la taille de votre police en fonction de la largeur de l'étiquette et du texte.
la source
adjustsFontSizeToFitWidth
réduit uniquement le texte s'il ne rentre pas dans le conteneurSur la base de la réponse de @Eyal Ben Dov, vous voudrez peut-être créer une catégorie pour la rendre flexible à utiliser dans d'autres applications de la vôtre.
Obs .: j'ai mis à jour son code pour le rendre compatible avec iOS 7
-En tête de fichier
-Fichier de mise en œuvre
-Usage
À votre santé
la source
setNeedsLayout
/layoutIfNeeded
si vous utilisez la mise en page automatique).Une seule ligne - Il y a deux façons, vous pouvez simplement changer.
1- Pragmatiquement (Swift 3)
Ajoutez simplement le code suivant
2 - Utilisation de l'inspecteur d'attributs UILabel
la source
Nous sommes en 2015. Je devais aller chercher un article de blog qui expliquerait comment le faire pour la dernière version d'iOS et XCode avec Swift afin que cela fonctionne avec plusieurs lignes.
Source: http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
la source
Version Swift:
la source
Voici une extension Swift pour UILabel. Il exécute un algorithme de recherche binaire pour redimensionner la police en fonction de la largeur et de la hauteur des limites de l'étiquette. Testé pour fonctionner avec iOS 9 et la mise en page automatique.
UTILISATION: Où se
<label>
trouve votre UILabel prédéfini qui doit être redimensionnéPar défaut, cette fonction recherche dans la plage des tailles de police 5 et 300 pt et définit la police pour qu'elle s'adapte «parfaitement» à son texte dans les limites (exactes à 1,0 pt). Vous pouvez définir les paramètres pour qu'il recherche, par exemple, entre 1 pt et la taille de police actuelle de l' étiquette avec précision dans les 0,1 pt de la manière suivante:
Copiez / collez le code suivant dans votre fichier
REMARQUE: Chacun des
layoutIfNeeded()
appels peut être supprimé à votre propre discrétionla source
Ce n'est pas un peu sophistiqué mais cela devrait fonctionner, par exemple, disons que vous voulez limiter votre uilabel à 120x120, avec une taille de police maximale de 28:
la source
Envoyez simplement le message sizeToFit à UITextView. Il ajustera sa propre hauteur pour s'adapter à son texte. Il ne changera pas sa propre largeur ou origine.
la source
sizeToFit
votretextViewA1
devient 200 points qui finissent par être rognés.Version Swift 2.0:
la source
Cette solution fonctionne pour la multiligne:
Après avoir suivi plusieurs articles et avoir exigé une fonction qui redimensionnerait automatiquement le texte et ajusterait le nombre de lignes pour mieux s'adapter à la taille d'étiquette donnée, j'ai écrit une fonction moi-même. (c'est-à-dire qu'une chaîne courte tiendrait bien sur une ligne et utiliserait une grande partie du cadre de l'étiquette, tandis qu'une longue chaîne se diviserait automatiquement en 2 ou 3 lignes et ajusterait la taille en conséquence)
N'hésitez pas à le réutiliser et à le modifier si nécessaire. Assurez-vous de l'appeler après
viewDidLayoutSubviews
avoir terminé afin que le cadre d'étiquette initial ait été défini.la source
Voici le code de remplissage d'une sous-classe UILabel qui implémente le changement de taille de police animé:
la source