使用换行符附加 NSAttributedString 会返回格式错误的属性字符串
Posted
技术标签:
【中文标题】使用换行符附加 NSAttributedString 会返回格式错误的属性字符串【英文标题】:Appending NSAttributedString with line break returns attributed string with wrong format 【发布时间】:2014-03-27 07:35:53 【问题描述】:我正在使用NSMutableAttributedString
和NSAttributedString
以两种不同的字体大小显示标签文本。我的做法是:
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 会返回格式错误的属性字符串的主要内容,如果未能解决你的问题,请参考以下文章
将换行符(即 \r\n)附加到 post 请求中发送的表单字段
jQuery:在 Textarea 的内容中附加一个不间断的空格
c_cpp 如果不存在,则将换行符附加到文件末尾。修改自https://support.microsoft.com/en-us/kb/268901