NSAttributedString忽略UILabel的自动收缩和numberOfLines(iOS 6)

时间:2014-01-22 17:48:58

标签: ios iphone objective-c uilabel nsattributedstring

我有UILabel 行数= 2 系统字体大小= 15 最小字体大小= 8 换行模式 - 截断尾部

当我为UILabel设置具有NSString类型的长文本时,它可以正常工作并显示多行文本(如果需要可以缩放)。 当我尝试使用NSAttributedString类型设置文本时,它会忽略最小字体大小和自动收缩,因此我看到一个最大字体大小的行文本。

是否有可能解决这个问题

看起来像这样(标签大小是常量)

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

---------------------------
|NSAttributedString tex...|
---------------------------

3 个答案:

答案 0 :(得分:87)

我找到了一种方法:

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

仅在设置属性字符串后设置第三行时才有效。设置(以及其他内容)时,属性字符串似乎会覆盖换行符。

答案 1 :(得分:6)

从iOS6开始,不推荐使用

minimumFontSize。此外,仅当numberOfLines设置为1时,adjustsFontSizeToFitWidth才有效.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;

答案 2 :(得分:0)

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