web-dev-qa-db-fra.com

NSAttributedString ignore Autoshrink et numberOfLines pour UILabel (iOS 6)

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...|
---------------------------
20
Sergey Pekar

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).

77
Julian B.

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;
6
Andy Obusek
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];
0
Swati