行数= 2のシステムフォントサイズ= 15の最小フォントサイズ= 8のUILabelがあります改行モード-末尾を切り捨て
UILabelにNSStringタイプの長いテキストを設定すると、うまく機能し、複数行のテキストが表示されます(必要に応じて拡大縮小されます)。タイプNSAttributedStringでテキストを設定しようとすると、最小フォントサイズと自動圧縮が無視されるため、最大フォントサイズの1行のテキストが表示されます。
この問題を解決することは可能ですか
このようなものです(ラベルサイズはconstです)。
-----------------------
| normal NSString Text|
| very very long ... |
-----------------------
---------------------------
|NSAttributedString tex...|
---------------------------
私はこれを行う方法を見つけました:
label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!
属性付き文字列を設定した後で3行目を設定した場合にのみ機能します。属性文字列は、(特に)設定されている場合、改行動作をオーバーライドするようです。
minimumFontSize
はiOS6で非推奨になりました。さらに、adjustsFontSizeToFitWidthは、numberOfLines
が1に設定されている場合にのみ機能します。UILabelは、フォントを縮小する際の改行の処理にあいまいさがあるため、複数行にまたがってテキストのサイズを変更しません。
minimumScaleFactor
を使用して、テキストをスケーリングする最小サイズを設定します。
次のコードは、フォントサイズ20の属性付き文字列をUILabel
に入力し、半分に縮小して最小サイズ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];