「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
在开发过程中经常会有这么一个需求, 就是同一行文字 有字体不一致 颜色不一致 字号不一致, 这样来进行展示. 众所周知label的text设置只能设置一个颜色, 一个字体, 一个字号, 这样多样式的文字如何展示呢?
在我刚接触开发的时候, 用了一个很是笨的办法来实现, 那就是用不同的label来设置不同的样式, 将label拼接起来. 然后依次排开的展示.
虽然这样也能解决, 但是这里又有一个很严重的问题, 那就是没办法换行, 只要换行那么就悲催了...😭
后来就发现了宝藏API NSAttributedString 通过这个API就可以实现这个小功能, 也是便捷了很多...苦逼的我太惨了...
NSAttributedString 可以设置不同的样式, 这里记录一下都有哪些样式
字体大小
-
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 对象, 配合NSVerticalGlyphFormAttributeNameNSObliquenessAttributeNameNSExpansionAttributeName其中的一个来使用才会有效果 -
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;
}