填补iOS10.3系统以后(NSStrikethroughStyleAttributeName)富文本删除线失效不显示的坑
最近在项目里遇见个问题,就是设置富文本删除线不起作用的问题,纠结了很长时间
原来我实现富文本删除线是这样写的,就是实现在价格文字中间画一条线:
_subPrice_Label.text = [NSString stringWithFormat:@"¥%.2f",programModel.salesPrice]; NSMutableAttributedString *salesPriceAttributed = [[NSMutableAttributedString alloc]initWithString:_subPrice_Label.text]; [salesPriceAttributed addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, _subPrice_Label.text.length)]; [salesPriceAttributed addAttribute:NSStrokeColorAttributeName value:[UIColor darkGrayColor] range:NSMakeRange(0, _subPrice_Label.text.length)]; _subPrice_Label.attributedText = salesPriceAttributed;
但上面的方法怎么都不行,不管是整行文字还是文字中的某个片段都不起作用,但是测试其他的富文本样式都还OK,这个在iOS10.3以前都是可以的
原来这是iOS10.3系统的一个bug,是个bug,就是个坑人的系统bug
iOS 10.3上显示异常,需要在添加一个NSBaselineOffsetAttributeName
属性才可以。如下:
NSMutableAttributedString *priceAttributed = [[NSMutableAttributedString alloc]initWithString:label.text]; NSRange range = [label.text rangeOfString:label.text]; [priceAttributed addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlineStyleSingle | NSUnderlinePatternSolid) range:range]; [priceAttributed addAttribute:NSStrikethroughColorAttributeName value:[UIColor redColor] range:range]; [priceAttributed addAttribute:NSBaselineOffsetAttributeName value:@(NSUnderlineStyleSingle) range:range]; label.attributedText = priceAttributed;
我在设置富文本删除线的时候添加了NSBaselineOffsetAttributeName
属性:
[priceAttributed addAttribute:NSBaselineOffsetAttributeName value:@(NSUnderlineStyleSingle) range:range];
这样这个坑就被填上了!
献给掉此坑的们,