NSMutableAttributedString的属性NSStrikethroughStyleAttributeName在iOS8中无法正常工作
我有一个可变的归属string没有NSStrikethroughStyleAttributeName属性是这样的:
NSMutableAttributedString *str1 = [[NSMutableAttributedString alloc] initWithString:@"aaaa" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleSingle]}];
另一个带有NSStrikethroughStyleAttributeName属性的可变属性string,如下所示:
NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb"];
和一个包含两个string的整个string:
NSMutableAttributedString *labelString = [[NSMutableAttributedString alloc] init]; [labelString appendAttributedString:str1]; [labelString appendAttributedString:str2];
当我把整个string附加到UILabel时:
_label.attributedText = labelString;
它在iOS7和iOS8中都很好地显示,如下所示:
AAAA BBBB
但是当我交换他们的位置时:
[labelString appendAttributedString:str2]; [labelString appendAttributedString:str1];
它在iOS7中正确显示,但在iOS8中不正确
ios7:bbbb AAAA ios8:bbbbaaaa
看来,在iOS8中,如果属性string中的第一个字符未被清除,则UILabel不会正确地显示删除线。 我认为这是iOS8的一个bug,有没有人遇到同样的问题?
NSMutableAttributedString *str2 = [[NSMutableAttributedString alloc] initWithString:@"bbbb" attributes:@{NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleNone]}];
它应该帮助
在iOS8.1.1上,与设置NSStrikethroughStyleAttributeName一样,我们在设置NSMutableAttributedString时遇到了更多的问题。
如果你的属性不改变尝试这个,它会。
我开始推理UILabel,这是灵魂chaneger属性,所以如果我们假设NSStrikethroughStyleAttributeName没有初始化标签文本,所以我们需要初始化它。
我所做的是通过none NSStrikethroughStyleAttributeName初始化mutableAttributedString,并将此属性更改为突出显示:result是:
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString: myString attributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleNone)}]; [string addAttributes: @ {NSStrikethroughStyleAttributeName: @ (NSUnderlineStyleSingle)} range: [myString rangeOfString: mySubString]]; [MyLabel setAttributedText: string];
有效的结果<= iOS8.1.1
修复iOS8中的错误:通过清除颜色的string的第一个字母,然后通过你想要的范围内的文本。
当你不从0开始索引时,试试这个:
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:@"Hello"]; [attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)} range:NSMakeRange(1, str.length)]; [attributedStr addAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)} range:NSMakeRange(0, 1)];
当你添加NSStrikethroughStyleAttributeName
,你还应该添加NSBaselineOffsetAttributeName
,它被设置为0.而在swift中,你应该使用NSUnderlineStyl
e的NSUnderlineStyl
。 在这里input图像描述
我看到相同的问题,并将NSStrikethroughStyleAttributeName的值更改为NSUnderlineStyleNone不解决此问题。 当然,似乎像iOS 8的错误。