美文网首页iOS用到的iOS DeveloperiOS项目
iOS给字符串添加删除线,下划线效果

iOS给字符串添加删除线,下划线效果

作者: 這Er | 来源:发表于2017-05-04 15:50 被阅读3608次

    本来以为挺简单的效果,没想到居然有点小坑🙄,写下来跟大家分享下

    给字符串添加删除线效果

    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;
    

    效果:

    QQ20170504-140132@2x.png

    在 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系统的模拟器,正常显示:


    QQ20170504-143253@2x.png
    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显示如下:


    QQ20170504-151351@2x.png

    在iOS 8.1显示如下(NSUnderlineStyleAttributeName在iOS 8.1不管用):


    QQ20170504-151604@2x.png
    如何在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;
    

    效果:


    QQ20170504-152134@2x.png

    总结:

    1. 给整个字符串添加效果
    • 删除线:设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle)}
    • 下划线:设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
    1. 给部分字符添加效果
    • 删除线:
      给全部字符串设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleNone)}
      添加删除线的字符串设置@{NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle), NSBaselineOffsetAttributeName : @0}
    • 下划线:
      给全部字符串设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone)}
      添加下划线的字符串设置@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)
    参考链接

    stackoverflow

    相关文章

      网友评论

        本文标题:iOS给字符串添加删除线,下划线效果

        本文链接:https://www.haomeiwen.com/subject/gnwrtxtx.html