iOS 給字符串添加刪除線,下劃線效果遇到的坑(10.3 與 8.1 系統)


原文地址: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系統的模擬器,呈現出一樣的效果,如下:


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 8.1,10.3系統的效果


在iOS 9.0系統的模擬器效果:


iOS 9.0系統的效果
問題出現了,如何在8.0和10.0的系統裏面使方法生效?

表情.jpg


不懂就要查嘍,經過搜索以後,找到了最簡單方便的解決辦法:

在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;

效果:

總結:

  1. 給整個字符串添加效果
    • 刪除線:設置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
    • 下劃線:設置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
  2. 給部分字符添加效果
    • 刪除線:
      給全部字符串設置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)}
      添加刪除線的字符串設置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle), NSBaselineOffsetAttributeName : @0}
    • 下劃線:
      給全部字符串設置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone)}
      添加下劃線的字符串設置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)
參考鏈接

stackoverflow



作者:這Er
鏈接:http://www.jianshu.com/p/f85165b8fc49
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章