web-dev-qa-db-ja.com

NSAttributedStringは、UILabelのAutoshrinkとnumberOfLinesを無視します(iOS 6)

行数= 2のシステムフォントサイズ= 15の最小フォントサイズ= 8のUILabelがあります改行モード-末尾を切り捨て

UILabelにNSStringタイプの長いテキストを設定すると、うまく機能し、複数行のテキストが表示されます(必要に応じて拡大縮小されます)。タイプNSAttributedStringでテキストを設定しようとすると、最小フォントサイズと自動圧縮が無視されるため、最大フォントサイズの1行のテキストが表示されます。

この問題を解決することは可能ですか

このようなものです(ラベルサイズはconstです)。

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

---------------------------
|NSAttributedString tex...|
---------------------------
31
Sergey Pekar

私はこれを行う方法を見つけました:

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

属性付き文字列を設定した後で3行目を設定した場合にのみ機能します。属性文字列は、(特に)設定されている場合、改行動作をオーバーライドするようです。

94
Julian B.

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;
8
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