J'ai UILabel avec Nombre de lignes = 2 Taille de la police système = 15 Taille de police minimale = 8 Mode de saut de ligne - Tronquer la queue
Lorsque je définis un texte long de type NSString pour UILabel, il fonctionne correctement et affiche un texte multiligne (mis à l'échelle si nécessaire). Lorsque j'essaie de définir du texte avec le type NSAttributedString, il ignore la taille minimale de la police et le réducteur automatique afin que j'en voie un. texte en ligne avec une taille de police maximale.
Est-il possible de résoudre ce problème
Ressemble à ceci (la taille de l'étiquette est constante)
-----------------------
| normal NSString Text|
| very very long ... |
-----------------------
---------------------------
|NSAttributedString tex...|
---------------------------
J'ai trouvé un moyen de faire ça:
label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!
Cela ne fonctionne que si la troisième ligne est définie après avoir défini la chaîne attribuée. Il semble que la chaîne attribuée remplace le comportement de saut de ligne lorsqu'il est défini (entre autres).
minimumFontSize
est obsolète à partir de iOS6. De plus, ajustsFontSizeToFitWidth fonctionne uniquement lorsque numberOfLines
est défini sur 1. UILabel ne redimensionne pas le texte sur plusieurs lignes, car la gestion des sauts de ligne est ambiguë lorsque vous réduisez la police.
Utilisez minimumScaleFactor
pour définir la plus petite taille à laquelle le texte doit être mis à l'échelle.
Le code suivant va renseigner une UILabel
avec une chaîne de caractères attribuée de taille 20 et le réduire de moitié à une taille minimale de 10.
self.label.lineBreakMode = NSLineBreakByTruncatingTail;
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:20.0]
range:NSMakeRange(0, [hogan length])];
[self.label setAttributedText:hogan];
self.label.adjustsFontSizeToFitWidth = YES;
self.label.numberOfLines = 1;
self.label.minimumScaleFactor = 0.5;
NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"];
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}];
[muAtrStr appendAttributedString:atrStr];
self.lbl.numberOfLines = 0;
[self.lbl setAttributedText:muAtrStr];