一句代码搞定文字变色、字体大小改变、改变字体间距、行间距 等

需求背景

需求1: 项目中有多个收货地址, 当其中的收货地址为默认地址的时候. 如下图

需求1

需求2: 项目中金额款项字体颜色变红

需求2

这时候用两个UILbl肯定是不合适的, 需要使用富文本属性修改, 考虑到项目中这种使用场景比较多, 所以为UILbl新增一个分类.

分类

UILabel+Extension.h

/**
 * 富文本应用:  变色, 改变字体大小
 */
- (void)changeLblFont:(float)font textColor:(UIColor *)textColor range: (NSRange)range;

UILabel+Extension.m

- (void)changeLblFont:(float)font textColor:(UIColor *)textColor range: (NSRange)range{
    
    if (self.text) {
        
        // 富文本变色 NSForegroundColorAttributeName
        NSMutableAttributedString *AttributedStr = [[NSMutableAttributedString alloc]initWithString:self.text];
        [AttributedStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:font] range:range];
        [AttributedStr addAttribute:NSForegroundColorAttributeName value:textColor range:range];
        self.attributedText = AttributedStr;
    }
}

使用

  • 需求一:
[self.addressLbl changeLblFont:12 textColor:kRedTextColor range:NSMakeRange(0, 6)];
  • 需求二:
提交成功:
[self.successLbl changeLblFont:15 textColor:kRedTextColor range:NSMakeRange(self.successLbl.text.length - 5, 5)];

金额字体变红:
[self.promptLbl changeLblFont:12 textColor:kRedTextColor range:NSMakeRange(self.promptLbl.text.length - str.length - 1, str.length)];

拓展

考虑到项目中其他对UILbl进行的操作: 改变字体间距、改变行间距、

  • .h
/**
 *  改变行间距  类方法
 */
+ (void)changeLineSpaceForLabel:(UILabel *)label WithSpace:(float)space textAlignment:(NSTextAlignment)textAlignment;

/**
 *  改变行间距
 */
- (void)changeLineSpaceForLabel:(float)space textAlignment:(NSTextAlignment)textAlignment;

/**
 *  改变字间距  类方法
 */
+ (void)changeWordSpaceForLabel:(UILabel *)label WithSpace:(float)space textAlignment:(NSTextAlignment)textAlignment;

/**
 *  改变字间距
 */
-(void)changeWordSpaceForLabel:(float)space textAlignment:(NSTextAlignment)textAlignment;

/**
 *  改变行间距和字间距  类方法
 */
+ (void)changeSpaceForLabel:(UILabel *)label withLineSpace:(float)lineSpace WordSpace:(float)wordSpace textAlignment:(NSTextAlignment)textAlignment;

/**
 *  改变行间距和字间距
 */
- (void)changeSpaceForLabel:(float)lineSpace WordSpace:(float)wordSpace textAlignment:(NSTextAlignment)textAlignment;
  • .m
/**
 *  改变行间距  类方法
 */
+ (void)changeLineSpaceForLabel:(UILabel *)label WithSpace:(float)space textAlignment:(NSTextAlignment)textAlignment {
    
    if (label.text) {
        
        NSString *labelText = label.text;
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText];
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineSpacing:space];
        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
        label.attributedText = attributedString;
        [label sizeToFit];
        label.textAlignment = textAlignment;
    }

}

/**
 *  改变行间距
 */
- (void)changeLineSpaceForLabel:(float)space textAlignment:(NSTextAlignment)textAlignment{
    
    if (self.text) {
        
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.text];
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineSpacing:space];
        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.text length])];
        self.attributedText = attributedString;
        [self sizeToFit];
        self.textAlignment = textAlignment;
    }
 
}


/**
 *  改变字间距  类方法
 */
+ (void)changeWordSpaceForLabel:(UILabel *)label WithSpace:(float)space textAlignment:(NSTextAlignment)textAlignment{
    
    if (label.text) {

        NSString *labelText = label.text;
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText attributes:@{NSKernAttributeName:@(space)}];
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
        label.attributedText = attributedString;
        [label sizeToFit];
        label.textAlignment = textAlignment;
    }
    
}

/**
 *  改变字间距
 */
-(void)changeWordSpaceForLabel:(float)space textAlignment:(NSTextAlignment)textAlignment{
    
    if (self.text) {
        
        // 取值为NSNumber对象(整数),负值间距变窄,正值间距变宽
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.text attributes:@{NSKernAttributeName:@(space)}];
        
        self.attributedText = attributedString;
        [self sizeToFit];
        self.textAlignment = textAlignment;
    }
    
}

/**
 *  改变行间距和字间距  类方法
 */
+ (void)changeSpaceForLabel:(UILabel *)label withLineSpace:(float)lineSpace WordSpace:(float)wordSpace textAlignment:(NSTextAlignment)textAlignment{
    
    if (label.text) {
        
        NSString *labelText = label.text;
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:labelText attributes:@{NSKernAttributeName:@(wordSpace)}];
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineSpacing:lineSpace];
        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [labelText length])];
        label.attributedText = attributedString;
        [label sizeToFit];
        label.textAlignment = textAlignment;
    }

}

/**
 *  改变行间距和字间距
 */
- (void)changeSpaceForLabel:(float)lineSpace WordSpace:(float)wordSpace textAlignment:(NSTextAlignment)textAlignment{
    
    if (self.text) {
        
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:self.text attributes:@{NSKernAttributeName:@(wordSpace)}];
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineSpacing:lineSpace];
        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.text length])];
        self.attributedText = attributedString;
        [self sizeToFit];
        self.textAlignment = textAlignment;
    }
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,224评论 4 61
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 25,539评论 7 249
  • 太阳还没醒转,街角的一丛木槿开的热烈,粉紫的花瓣儿重重又叠叠,像不像小女孩刚刚套上了新舞裙,鲜格格转个圈儿,裙摆哗...
    初照晨阅读 248评论 0 0
  • 从十一月中休学算起的话,到现在是十个月,差点一年。十一月末到十二月我留在北京,见了一些人看了一些展,办理手续整理行...
    Leonaxixi阅读 288评论 0 0