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