首页 文章

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

提问于
浏览
22

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

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

是否有可能解决这个问题

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

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

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

3 回答

  • 0

    我找到了一种方法:

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

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

  • 6

    minimumFontSize 自iOS6起已弃用 . 此外,仅当 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;
    
  • 79
    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];
    

相关问题