使用换行符附加 NSAttributedString 会返回格式错误的属性字符串

Posted

技术标签:

【中文标题】使用换行符附加 NSAttributedString 会返回格式错误的属性字符串【英文标题】:Appending NSAttributedString with line break returns attributed string with wrong format 【发布时间】:2014-03-27 07:35:53 【问题描述】:

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

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

这会返回一个属性字符串,其中“2”的字体大小为 12,“天”的字体大小为 8。

但是,另一种情况是在2之后添加一个换行符。我使用以下代码:

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

此时间属性字符串将属性应用于全文。我得到一个带有“2\ndays”字号为 8 的属性字符串。

【问题讨论】:

如果有更好的方法来做必要的事情,请指导我。 您还可以使用属性字符串的- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range 方法将属性设置为属性字符串的不同部分。而setLineBreakMode的标签为NSLineBreakByWordWrapping 对于像我一样被卡住的人,设置 yourLabel.numberOfLines = 0;在代码中。 【参考方案1】:

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

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 以允许任意数量的行

【讨论】:

但在 UILabel 中,它以相同的字体大小显示 2 和天,即 8。我想以 12 的字体大小显示 2,以 8 的字体大小显示天。 仅适用于“天”文本。 “2”字符串的默认字体大小为 12。当我不在字符串中使用 \n 时工作完美。 对不起,它也不起作用...可能适用于文本视图,不适用于 uilabel。 是的,uilabel 也以相同的字体显示两个字符串,即 2 和天,没有变化 使用 ios7.1 并按照您的描述设置属性文本。【参考方案2】:

这适用于 Swift:

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

【讨论】:

以上是关于使用换行符附加 NSAttributedString 会返回格式错误的属性字符串的主要内容,如果未能解决你的问题,请参考以下文章

Jquery用换行符附加文本数据

将换行符(即 \r\n)附加到 post 请求中发送的表单字段

将文本附加到带有换行符的文本区域

jQuery:在 Textarea 的内容中附加一个不间断的空格

c_cpp 如果不存在,则将换行符附加到文件末尾。修改自https://support.microsoft.com/en-us/kb/268901

为啥bash只将第一个元素附加到数组