使用换行符附加NSAttributedString会返回格式错误的归因string

我使用NSMutableAttributedStringNSAttributedString以两种不同的字体大小显示标签文本。 我的做法是:

 NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"days" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; [muAtrStr appendAttributedString:atrStr]; 

其中返回一个字符大小为12的“2”和字体大小为8的“天”的Attributedstring。

但是,另一个scheme是在2之后添加换行符。我使用下面的代码:

 NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"]; NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}]; [muAtrStr appendAttributedString:atrStr]; 

这次属性string应用了全文的属性。 我得到字体大小为8的“2 \ ndays”属性string。

试试下面的代码,它工作正常: –

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

注意: – 也允许numberOfLines为0允许任意数量的行

这在Swift中有效:

 let attributedText = NSAttributedString(string: "Happy \nDays") label.numberOfLines = 0 label.lineBreakMode = .byWordWrapping label.attributedText = attributedText