本来以为挺简单的效果,没想到居然有点小坑🙄,写下来跟大家分享下
给字符串添加删除线效果
1. 给字符串"123456"添加删除线效果
设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
attributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}];
label.attributedText = attrStr;
在iOS 8.1,9.0,10.3系统的模拟器,呈现出一样的效果,如下:
2. 只给字符串某一部分添加删除线
如:字符串"123456",只给“456”添加删除线
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"];
[attrStr setAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
range:NSMakeRange(3, 3)];
label.attributedText = attrStr;
继续使用上面的方法得到效果如下:
在iOS 8.1,10.3系统的模拟器效果(NSStrikethroughStyleAttributeName在iOS 10.3、8.1不管用):
在iOS 9.0系统的模拟器效果:
问题出现了,如何在8.0和10.0的系统里面使方法生效?
不懂就要查喽,经过搜索以后,找到了最简单方便的解决办法:
在iOS 8 需要额外给其他字符串设置
@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)}
,才能正常显示
在iOS 10 需要额外给其他字符串设置@{NSBaselineOffsetAttributeName : @0}
,才能正常显示
- 注:@(NSUnderlineStyleNone) 和 @0均是默认值
两者综合一下,
代码:
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
attributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)}];
[attrStr setAttributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle),
NSBaselineOffsetAttributeName : @0}
range:NSMakeRange(3, 3)];
label.attributedText = attrStr;
效果:
在 iOS 8.1、9.0 和 iOS 10.3均能正常显示,使用其他方法也可以,但是要保证上面的属性设置上
给字符串添加下划线效果
1. 给字符串"123456"添加下划线效果
设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
attributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}];
label.attributedText = attrStr;
在iOS 8.1,9.0,10.3系统的模拟器,正常显示:
2. 只给字符串某一部分添加下划线效果
如:字符串"123456",只给“456”添加下划线
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"];
[attrStr setAttributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
range:NSMakeRange(3, 3)];
label.attributedText = attrStr;
在iOS 9.0、 iOS 10.3显示如下:
在iOS 8.1显示如下(NSUnderlineStyleAttributeName在iOS 8.1不管用):
如何在iOS 8的系统里面使添加下划线方法生效?
在iOS 8 需要额外给其他字符串设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone)},才能正常显示
代码:
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
attributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone)}];
[attrStr setAttributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
range:NSMakeRange(3, 3)];
label.attributedText = attrStr;
效果:
总结:
- 给整个字符串添加效果
- 删除线:设置
@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
- 下划线:设置
@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
- 给部分字符添加效果
- 删除线:
给全部字符串设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)}
添加删除线的字符串设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle), NSBaselineOffsetAttributeName : @0}
- 下划线:
给全部字符串设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone)}
添加下划线的字符串设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)