iOS-富文本设置

697 阅读2分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

在开发过程中经常会有这么一个需求, 就是同一行文字 有字体不一致 颜色不一致 字号不一致, 这样来进行展示. 众所周知label的text设置只能设置一个颜色, 一个字体, 一个字号, 这样多样式的文字如何展示呢?

在我刚接触开发的时候, 用了一个很是笨的办法来实现, 那就是用不同的label来设置不同的样式, 将label拼接起来. 然后依次排开的展示.

虽然这样也能解决, 但是这里又有一个很严重的问题, 那就是没办法换行, 只要换行那么就悲催了...😭

后来就发现了宝藏API NSAttributedString 通过这个API就可以实现这个小功能, 也是便捷了很多...苦逼的我太惨了...

NSAttributedString 可以设置不同的样式, 这里记录一下都有哪些样式

image.png

字体大小

  • 1、NSFontAttributeName 字体大小
    对应的值是 UIFont 对象

  • 2、NSParagraphStyleAttributeName 段落风格
    对应的值是 NSParagraphStyle 对象, 包含设置 首行,行间距,对齐方式 等等

  • 3、NSForegroundColorAttributeName 字体颜色
    对应的值是 UIColor 对象

  • 4、NSBackgroundColorAttributeName 背景色
    对应的值是 UIColor 对象

  • 5、NSLigatureAttributeName 文本连体
    对应的值是 NSNumbe 对象

  • 6、NSKernAttributeName 间距
    对应的值是 NSNumbe 对象

  • 7、NSStrikethroughStyleAttributeName 删除线
    对应的值是 NSNumbe 对象, 包含 单划线, 双划线

  • 8、NSStrikethroughColorAttributeName 删除线颜色
    对应的值是 UIColor 对象

  • 9、NSUnderlineStyleAttributeName 下划线\(value是NSNumber对象): 文本设置下划线 对应的值是 NSNumbe 对象

  • 10、NSUnderlineColorAttributeName 下划线颜色
    对应的值是 UIColor 对象

  • 11、SStrokeColorAttributeName 描边颜色 对应的值是 UIColor 对象

  • 12、NSStrokeWidthAttributeName 描边宽度
    对应的值是 NSNumbe 对象, 配合 NSStrokeColorAttributeName 使用,可以达到空心文字的效果

  • 13、NSShadowAttributeName 阴影
    对应的值是 NSShadow 对象, 配合 NSVerticalGlyphFormAttributeName NSObliquenessAttributeName NSExpansionAttributeName 其中的一个来使用才会有效果

  • 14、NSLinkAttributeName 链接
    对应的值是 NSURL 或者 NSString

  • 15、NSBaselineOffsetAttributeName 基线偏移
    对应的值是 NSNumber 对象

  • 16、NSAttachmentAttributeName 文本附件
    对应的值是 NSTextAttachment 对象, 一般用于 图文混排

  • 17、NSVerticalGlyphFormAttributeName 排版方向
    对应的值是 NSNumber 对象

  • 18、NSObliquenessAttributeName 斜体角度\  对应的值是 NSNumber 对象

  • 19、NSExpansionAttributeName 横线拉伸
    对应的值是 NSNumber 对象

  • 20、NSWritingDirectionAttributeName 文字方向
    对应的值是 NSNumber 对象

结语

通过上述对 NSAttributedString 的了解, 为了加深自己的理解, 然后就写了一个分类来专门记录这个功能, 方便自己后期来进行回忆.

+ (instancetype)attributedStrings:(NSArray <NSString *>*)strings colors:(NSArray <UIColor *>*)colors fonts:(NSArray <UIFont*>*)fonts {
    NSMutableAttributedString *str = [[NSMutableAttributedString alloc] init];
    for (int i = 0; i < strings.count; i++) {
        NSInteger colorIndex = i < colors.count ? i : colors.count - 1;
        NSInteger fontIndex = i < fonts.count ? i : fonts.count - 1;
        NSAttributedString *tempStr = [[NSAttributedString alloc] initWithString:strings[i] attributes:@{NSForegroundColorAttributeName : colors[colorIndex], NSFontAttributeName : fonts[fontIndex]}];
        [str appendAttributedString:tempStr];
    }
    return str.copy;
}