最近经常遇到关于富文本的一些需求,特此封装了几个最常用的API分享给大家,但授之以鱼不如授之以渔,接下来会顺便谈谈NSAttributedString,确保你读了本篇文章能够自己封装关于富文本的API,本文封装API的示例Demo再此,拿去用吧!骚年们!
一、常用需求封装
- 需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色(一种颜色)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * 单纯改变一句话中的某些字的颜色(一种颜色) * * @param color 需要改变成的颜色 * @param totalStr 总的字符串 * @param subArray 需要改变颜色的文字数组(要是有相同的 只取第一个) * * @return 生成的富文本 */ + (NSMutableAttributedString *)ls_changeCorlorWithColor:(UIColor *)color TotalString:(NSString *)totalStr SubStringArray:(NSArray *)subArray { NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalStr]; for (NSString *rangeStr in subArray) { NSRange range = [totalStr rangeOfString:rangeStr options:NSBackwardsSearch]; [attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range]; } return attributedStr; } |
- 需求:需要更改字间距来适应整体UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * 单纯改变句子的字间距(需要 <CoreText/CoreText.h>) * * @param totalString 需要更改的字符串 * @param space 字间距 * * @return 生成的富文本 */ + (NSMutableAttributedString *)ls_changeSpaceWithTotalString:(NSString *)totalString Space:(CGFloat)space { NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString]; long number = space; CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number); [attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])]; CFRelease(num); return attributedStr; } |
- 需求:需要改变行间距来适应整体UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * 单纯改变段落的行间距 * * @param totalString 需要更改的字符串 * @param lineSpace 行间距 * * @return 生成的富文本 */ + (NSMutableAttributedString *)ls_changeLineSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace { NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString]; NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:lineSpace]; [attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])]; return attributedStr; } |
- 需求:同时更改行间距和字间距
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
}
return attributedStr;
}