赞
踩
原文地址:http://www.jianshu.com/p/f85165b8fc49
本来以为挺简单的效果,没想到居然有点小坑,写下来跟大家分享下
设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
- NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
- attributes:@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}];
- label.attributedText = attrStr;
在iOS 8.1,9.0,10.3系统的模拟器,呈现出一样的效果,如下:
如:字符串"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系统的模拟器效果:
不懂就要查喽,经过搜索以后,找到了最简单方便的解决办法:
在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均能正常显示,使用其他方法也可以,但是要保证上面的属性设置上
设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
- NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"123456"
- attributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}];
- label.attributedText = attrStr;
在iOS 8.1,9.0,10.3系统的模拟器,正常显示:
如:字符串"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 需要额外给其他字符串设置@{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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。