2009-08-24 8 views
1

J'ai un NSString et je veux l'insérer dans un rectangle. Le rectangle a une taille spécifiée, disons width = 150 et height = 30. Lorsque la chaîne est courte et n'a qu'un seul caractère, elle peut être aussi élevée que le rectangle. Plus spécifique: Il peut avoir une grande taille de police. Mais si la chaîne a trop de caractères et dépasse les limites du rectangle, elle doit devenir plus petite. Plus spécifique: La taille de la police doit être réduite pour ne pas dépasser les limites du rectangle. Existe-t-il un moyen de le faire sans se tromper dans les graphiques de base?Comment insérer une chaîne dans un rectangle?

Pour une raison quelconque, la propriété ajustsFontSizeToFitWidth de UILabel n'a aucun effet. Le texte continue d'être petit même s'il y a beaucoup d'espace.

Je me suis fixé que pour

label.adjustsFontSizeToFitWidth = YES; 

, mais rien ne se passe. J'espère qu'il y a une autre façon de le faire ...

+0

Qu'entendez-vous par plus petit? Voulez-vous dire tronquer la chaîne? – fbrereto

+0

taille de police plus petite/pas de troncature. mis à jour la question avec plus de détails –

Répondre

6

Il y a plusieurs parties à UILabel qui rendent cela possible, mais vous devez d'abord savoir si vous voulez tronquer la chaîne ou réduire la taille de la police pour qu'elle rectangle.

Dans les deux cas, vous devez définir la propriété numberOfLines de UILabel sur 0, en laissant l'étiquette s'enrouler autant que nécessaire. Ensuite, vous aurez besoin de définir le frame du UILabel pour correspondre au rectangle que vous cherchez à adapter. De là, vous prenez l'un des deux chemins:

  • troncature: Définissez la propriété lineBreakMode à UILineBreakModeClip, UILineBreakModeHeadTruncation, UILineBreakModeTailTruncation ou UILineBreakModeMiddleTruncation en fonction du comportement de troncature que vous recherchez.
  • Redimensionnement: Définissez le lineBreakMode sur UILineBreakModeWordWrap ou `UILineBreakModeCharacterWrap 'en fonction de vos préférences. Ensuite, vous devrez entrer une boucle pour déterminer la bonne taille de police. Commencez par une taille de police raisonnable (par exemple, 12) et:
    • Définissez la propriété font du UILabel avec un UIFont qui correspond à cette taille
    • Appel - (void) sizeToFit pour le UILabel.
    • Vérifiez la frame pour la UILabel:
      • Si le cadre s'adaptera dans les limites que vous avez besoin, vous avez terminé
      • Si le cadre est encore grand, la taille de laisser tomber la police et répéter la boucle

pour cette dernière option, vous voulez vous assurer que vous n'êtes pas presser le texte dans l'oubli, alors vous wa nt de mettre une taille minimale sur la taille de la police. Vous pouvez obtenir plus d'informations sur la documentation UILabel et UIFont.

4

adjustsFontSizeToFitWidth Ajuste la taille de la police vers le bas, non vers le haut.

Définissez la police sur votre UILabel à une taille suffisamment grande, et UILabel la rétrécira si nécessaire pour s'adapter à ses limites.

0
  1. Définissez la taille de police de l'étiquette sur la taille normale souhaitée.
  2. Set étiquette taille minimale des caractères à la plus petite police possible (minimumFontSize propriété)
  3. Set adjustsFontSizeToFitWidth à YES.

Si vous avez besoin de plusieurs lignes, réglez lineCount sur 0 comme indiqué sur l'autre affiche.

Questions connexes