美文网首页iOS开发首页投稿(暂停使用,暂停投稿)iOS Developer
iOS 一个label里面的文字显示不同的颜色和大小

iOS 一个label里面的文字显示不同的颜色和大小

作者: 程序sky | 来源:发表于2017-12-07 16:23 被阅读155次

最近换了家公司,博主一直忙着做项目,没时间更简书,没能给大家带来更多的帮助,惭愧,趁现在抽出点时间,把最近用到的一个简便的小工具发布出来,仅供大家参考:
在一个label里面的文字显示不同的颜色和大小:
先晒出.h文件里面的类方法名称:

#import <UIKit/UIKit.h>
@interface LHYMutableAttributedString : NSMutableAttributedString

/**
 *  单纯改变一句话中的某些字的颜色
 *
 *  @param color    需要改变成的颜色
 *  @param totalStr 总的字符串
 *  @param subArray 需要改变颜色的文字数组
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeCorlorWithColor:(UIColor *)color TotalString:(NSString *)totalStr SubStringArray:(NSArray *)subArray;

/**
 *  单纯改变句子的字间距(需要 )
 *
 *  @param totalString 需要更改的字符串
 *  @param space       字间距
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeSpaceWithTotalString:(NSString *)totalString Space:(CGFloat)space;

/**
 *  同时更改行间距和字间距
 *
 *  @param totalString 需要改变的字符串
 *  @param lineSpace   行间距
 *  @param textSpace   字间距
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeLineAndTextSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace textSpace:(CGFloat)textSpace;

/**
 *  改变某些文字的颜色 并单独设置其字体
 *
 *  @param font        设置的字体
 *  @param color       颜色
 *  @param totalString 总的字符串
 *  @param subArray    想要变色的字符数组
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString SubStringArray:(NSArray *)subArray;

在.h文件里声明了改变不同形式的类方法名称,喜欢的直接利用起来.
下面是.m实现的方法

#import "LHYMutableAttributedString.h"
#import <CoreText/CoreText.h>

@implementation LHYMutableAttributedString

//需求:在我们日常开发中,某些句子中会有改变某些字颜色的需求,当然颜色一般而言就是为了着重强调,常为同一种颜色,所以下面代码是单纯改变一句话中的某些字的颜色

/**
 *  单纯改变一句话中的某些字的颜色
 *
 *  @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
/**
 *  单纯改变句子的字间距(需要 )
 *
 *  @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;
}

/**
 *  同时更改行间距和字间距
 *
 *  @param totalString 需要改变的字符串
 *  @param lineSpace   行间距
 *  @param textSpace   字间距
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeLineAndTextSpaceWithTotalString:(NSString *)totalString LineSpace:(CGFloat)lineSpace textSpace:(CGFloat)textSpace {
    NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:lineSpace];
    [attributedStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [totalString length])];
    long number = textSpace;
    CFNumberRef num = CFNumberCreate(kCFAllocatorDefault,kCFNumberSInt8Type,&number);
    [attributedStr addAttribute:(id)kCTKernAttributeName value:(__bridge id)num range:NSMakeRange(0,[attributedStr length])];
    CFRelease(num);
    return attributedStr;
}

//需求:更改某些文字的颜色并修改其字体,突出重点强调
/**
 *  改变某些文字的颜色 并单独设置其字体
 *
 *  @param font        设置的字体
 *  @param color       颜色
 *  @param totalString 总的字符串
 *  @param subArray    想要变色的字符数组
 *
 *  @return 生成的富文本
 */
+ (NSMutableAttributedString *)ls_changeFontAndColor:(UIFont *)font Color:(UIColor *)color TotalString:(NSString *)totalString SubStringArray:(NSArray *)subArray {
    NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:totalString];
    for (NSString *rangeStr in subArray) {
        NSRange range = [totalString rangeOfString:rangeStr options:NSBackwardsSearch];
        [attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
        [attributedStr addAttribute:NSFontAttributeName value:font range:range];
    }
    return attributedStr;
}
@end

实现类的方法博主也已经分享给大家了,至于怎么使用的呢... 帮人帮到底吧 我给大家举个例子看一下:
首先引入.m文件

#import "LHYMutableAttributedString.h"
//创建Label我就不再赘述了.
self.testLabe.text = @"凯里~谁也防不住~欧文";
    NSArray *arr = @[@"谁",@"防",@"欧文"];
    NSMutableAttributedString *attributedStringM = [[NSMutableAttributedString alloc] init];
    attributedStringM = [LHYMutableAttributedString ls_changeFontAndColor:[UIFont boldSystemFontOfSize:10] Color:[UIColor redColor] TotalString:_testLabe.text SubStringArray:arr];
    self.testLabe.attributedText = attributedStringM;

嗯... 效果是这个样子的


3E2FD00A-0E9C-46C2-AAB9-4066A519243B.png

相信大家看了之后应该能明白我要表达什么意思了吧? 也应该知道这个玩意到底怎么用的了是吧
.
.
.
.

还是那句话,能帮到你,才是我最大的成就. 谢谢.....
欢迎大家指点,交流,我看到会第一时间回复,除非没看到... 哈哈!!!!😆

相关文章

网友评论

  • 墨_辰:你好,我想提一个小问题啊,如果一行文字里面有几个字是相同的,我只想改变其中一个或者两个要怎么办呢?你这个方法好像只能改变最后一个字哦。
    墨_辰:@程序sky 我自己在您的代码上改了一下,觉得传一个字典进去会好一点,key和value分别对应要改的字符和他在句子中第几个。提出我的想法供您参考一下😁
    程序sky:@墨_辰 嗯嗯 是的 这只是在项目里遇到了然后在网上查了点资料,自己抽取的一些方法,您说的这些我还真没考虑,以后有时间可以研究一下! 谢谢指导....
  • 斌小狼:有GitHub的例子吗?其实有个例子会更直观
  • 天然酱油:大神,如果要实现一行字像进度条一样持续的改变颜色,这样用富文本应该是不能实现的吧
    ddaa8dae50b0:@天然酱油 gradient layer + uilabel的layer作为mask
    天然酱油:就类似于KTV的歌词

本文标题:iOS 一个label里面的文字显示不同的颜色和大小

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