webentwicklung-frage-antwort-db.com.de

NSAttributedString ignoriert Autoshrink und numberOfLines für UILabel (iOS 6)

Ich habe UILabel mit Zeilenzahl = 2 Systemschriftgröße = 15 Mindestschriftgröße = 8 Zeilenumbruchmodus - Schwanz abschneiden

Wenn ich langen Text mit dem Typ NSString für UILabel setze, funktioniert er einwandfrei und zeigt mehrzeiligen Text (bei Bedarf skaliert). Wenn ich versuche, Text mit dem Typ NSAttributedString festzulegen, werden die minimale Schriftgröße und Autoshrink ignoriert Zeilentext mit maximaler Schriftgröße.

Ist es möglich, dieses Problem zu lösen?

Sieht ungefähr so ​​aus (Labelgröße ist const)

-----------------------
| normal NSString  Text|
| very  very  long ... | 
-----------------------

---------------------------
|NSAttributedString tex...|
---------------------------
20
Sergey Pekar

Ich habe einen Weg gefunden, dies zu tun:

label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!

Es funktioniert nur, wenn die dritte Zeile nach dem Festlegen der zugewiesenen Zeichenfolge gesetzt wird. Es scheint, als ob die attributierte Zeichenfolge das Zeilenumbruchsverhalten überschreibt (ua).

77
Julian B.

minimumFontSize ist seit iOS6 veraltet. Darüber hinaus funktioniert adjustsFontSizeToFitWidth nur, wenn für numberOfLines der Wert 1 festgelegt ist. Die Größe von UILabel ändert sich nicht über mehrere Zeilen hinweg, da beim Verkleinern der Schriftart Unklarheiten beim Umgang mit Zeilenumbrüchen bestehen.

Verwenden Sie minimumScaleFactor, um die kleinste Größe festzulegen, für die der Text skaliert werden soll.

Der folgende Code füllt eine UILabel mit der zugewiesenen Zeichenfolge der Schriftgröße 20 und verkleinert sie um die Hälfte auf eine Mindestgröße von 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