原文地址:http://www.jianshu.com/p/f85165b8fc49
本來以爲挺簡單的效果,沒想到居然有點小坑,寫下來跟大家分享下
給字符串添加刪除線效果
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)
- 刪除線:
參考鏈接
作者:這Er
鏈接:http://www.jianshu.com/p/f85165b8fc49
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。