NSAttributedString忽略UILabel(iOS 6)的Autoshrink和numberOfLines

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

当我为UILabel设置具有NSStringtypes的长文本时,它可以正常工作,并显示多行文本(如果需要,可以缩放)。 当我试图设置NSAttributedStringtypes的文本,它会忽略最小字体大小和Autoshrink,所以我看到一个最大的字体大小的行文本。

有没有可能解决这个问题

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

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

我find了一个方法来做到这一点:

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

只有在设置了属性string后设置了第三行时,它才起作用。 看起来像属性的string覆盖换行时设置(等)。

minimumFontSize已弃用。 此外,adjustsFontSizeToFitWidth仅在numberOfLines设置为1时才起作用。UILabel不会跨多行调整文本大小,因为在缩小字体的同时处理换行符时存在不明确的地方。

使用minimumScaleFactor设置文本缩放的最小尺寸。

以下代码将使用字体大小为20的属性string填充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];