我有一个没有NSStrikethroughStyleAttributeName属性的可变属性字符串,如下所示:
NSMutableAttributedString *str1 = [[NSMutableAttributedString alloc] initWithString:@"aaaa" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleSingle]}];
和另一个带有NSStrikethroughStyleAttributeName属性的可变属性字符串,如下所示:
NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb"];
以及包含上面两个字符串的整个字符串:
NSMutableAttributedString *labelString = [[NSMutableAttributedString alloc] init];
[labelString appendAttributedString:str1];
[labelString appendAttributedString:str2];
当我将整个字符串附加到UILabel时:
_label.attributedText = labelString;
它在iOS7和iOS8中都表现良好,如下所示:
<德尔> AAAA 德尔> BBBB
但是当我交换他们的职位时:
[labelString appendAttributedString:str2];
[labelString appendAttributedString:str1];
它在iOS7中正确显示,但在iOS8中没有正确显示
ios7:bbbb aaaa ios8:bbbbaaaa
似乎在iOS8中,如果属性字符串中的第一个字符不是strikethroughed,则UILabel不会正确渲染删除线。 我认为这是iOS8中的一个错误,是否有人遇到过与我相同的问题?
答案 0 :(得分:10)
NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleNone]}];
它应该有帮助
答案 1 :(得分:8)
在 iOS8.1.1 上,设置 NSMutableAttributedString 会遇到更多问题,例如 NSStrikethroughStyleAttributeName 。
如果你的属性没有改变,请试试这个。它将是。
我开始使用UILabel作为chaneger属性的精神推理,所以如果我们假设NSStrikethroughStyleAttributeName没有初始化标签文本,那么我们将需要初始化它。
我所做的是通过none NSStrikethroughStyleAttributeName初始化mutableAttributedString并更改此属性以突出显示: 结果是:
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString: myString attributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleNone)}];
[string addAttributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleSingle)} range: [myString rangeOfString: mySubString]];
[MyLabel setAttributedText: string];
有效结果&lt; = iOS8.1.1
答案 2 :(得分:3)
修复iOS8中的错误:使用清晰的颜色敲击字符串的第一个字母,然后在您希望的范围内搜索文本。
答案 3 :(得分:1)
当你没有从0开始索引时,试试这个:
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:@"Hello"];
[attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)} range:NSMakeRange(1, str.length)];
[attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)} range:NSMakeRange(0, 1)];
答案 4 :(得分:1)
添加NSStrikethroughStyleAttributeName
时,还应添加NSBaselineOffsetAttributeName
,设置为0.在swift中,您应该使用NSUnderlineStyl
e的rawValue。
enter image description here
答案 5 :(得分:0)
我看到同样的问题,并将NSStrikethroughStyleAttributeName的值更改为NSUnderlineStyleNone并没有修复它。当然看起来像iOS 8的bug。