UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString)

时间:2020-12-20 09:32:29

text去掉乱码 设置不同颜色 行高 自定义大小

#import <Foundation/Foundation.h>

@interface TextsForRow : NSObject

@property(nonatomic,copy)NSString * string;

/**
文本包含了 标题+文本。 使用前设置内容的颜色
操作中:标题设置颜色。文本颜色 标题+文本字体大小 行间距 以及返回高度 @param stringTitle title文本
@param colorTitle title颜色
@param stringText 内容text
@return 返回数组3个。 1 返回的 NSMutableAttributedString * strAttebute;;2返回的 宽度0.2f的string,使用时转化 3:高度
*/
+(NSArray *)TextsForRowWithStringTitle:(NSString*)stringTitle ColorWith:(UIColor*)colorTitle textWithStringText:(NSString*)stringText;
@end
#import "TextsForRow.h"

@implementation TextsForRow

+(NSArray *)TextsForRowWithStringTitle:(NSString*)stringTitle ColorWith:(UIColor*)colorTitle textWithStringText:(NSString*)stringText{

    //title+text
NSString * str1 =[NSString stringWithFormat:@"%@%@",stringTitle,stringText]; //删除不需要的个别字符
NSString * str = [str1 stringByReplacingOccurrencesOfString:@"<DIV>" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"</DIV>" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"<BR>" withString:@""];
str = [str stringByReplacingOccurrencesOfString:@"</BR>" withString:@""]; //删除讨厌的字符
NSRegularExpression * regu2 =[NSRegularExpression regularExpressionWithPattern:@"(?:<|</|>|&nbsp;)" options:NSRegularExpressionCaseInsensitive error:nil];
NSString *string3 = [regu2 stringByReplacingMatchesInString:str options:NSMatchingReportProgress range:NSMakeRange(, str.length) withTemplate:@""]; //去掉左右两边的空格
NSString * kongge = [string3 stringByReplacingOccurrencesOfString:@" " withString:@""]; //去掉左右两边的空格
NSString * string = [kongge stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSMutableAttributedString * strAttebute = [[NSMutableAttributedString alloc] initWithString:string ];
//设置title颜色
[strAttebute addAttribute:NSForegroundColorAttributeName value:colorTitle range:NSMakeRange(, stringTitle.length)]
;
//行间距
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc]init];
[paragraphStyle setLineSpacing:IPHONEHIGHT()];
[strAttebute addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(, string.length)]; //自定义大小
CGSize contentSize = [string boundingRectWithSize:CGSizeMake(ScreenWidth-IPHONEWIDTH(),MAXFLOAT ) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:IPHONEWIDTH()]} context:NULL].size; CGFloat height = contentSize.height; //进行返回
NSArray * array =@[strAttebute,[NSString stringWithFormat:@"%0.2f",contentSize.width],[NSString stringWithFormat:@"%0.2f",height]]; return array; } @end

案例1:修改文本字体大小、颜色属性

比如文本展示为姓名和性别,但是我们不能排除姓名会很长,所以此刻的lable宽度我们就不能写死,换句话说lable的宽度根据文本的内容来定

UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString)

我经常用两种方式解决:

1.前面文章已经涉及:lable自适应http://blog.csdn.net/tuwanli125/article/details/51003798

2.就是使用NSMutableAttributedString属性给infoL设置文本

NSString *infoStr = [NSStringstringWithFormat:@"%@ %@",name,sex];

NSMutableAttributedString *infoAttStr = [[NSMutableAttributedStringalloc] initWithString:infoStr];

NSArray *colorArr =@[[UIColorcolorWithRed:0/255.0green:168/255.0blue:255/255.0alpha:1.0],[UIColorcolorWithRed:153/255.0green:153/255.0blue:153/255.0alpha:1.0]];

--------修改姓名的颜色,字体大小------

[infoAttStr addAttribute:NSForegroundColorAttributeNamevalue:colorArr[0]range:NSMakeRange(0,name.length)];

[infoAttStr addAttribute:NSFontAttributeNamevalue:[UIFontsystemFontOfSize:15]range:NSMakeRange(0,name.length)];

--------修改性别的颜色,字体大小------

[infoAttStr addAttribute:NSFontAttributeNamevalue:[UIFontsystemFontOfSize:12]range:NSMakeRange(name.length+1,sexStr.length)];

[infoAttStr addAttribute:NSForegroundColorAttributeNamevalue:colorArr[1]range:NSMakeRange(name.length+1,sexStr.length)];

[self.infoL setAttributedText:infoAttStr];

这样一个文本就可以了,简单快捷

案例2:文本行间距

remindLabel.text = @""(一堆文字,此处省略一万字UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString))

NSMutableAttributedString *attributedString = [[NSMutableAttributedStringalloc]initWithString:remindLabel.text];;

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStylealloc]init];

[paragraphStyle setLineSpacing:9];

paragraphStyle.maximumLineHeight = 60;  //最大的行高

[paragraphStyle setFirstLineHeadIndent:30];//首行缩进

[attributedString addAttribute:NSParagraphStyleAttributeNamevalue:paragraphStylerange:NSMakeRange(0, remindLabel.text.length)];

remindLabel.attributedText = attributedString;

文本行间距 以及自定义高度

NSMutableAttributedString * strAttebute = [[NSMutableAttributedString alloc] initWithString:check1];

//设置行间距

NSMutableParagraphStyle * paragraphStlyle = [[NSMutableParagraphStyle alloc] init];

[paragraphStlyle setLineSpacing:IPHONEHIGHT(10)];

[strAttebute addAttribute:NSParagraphStyleAttributeName value:paragraphStlyle range:NSMakeRange(0, check1.length)];

c2ell.labelText.attributedText = strAttebute;

CGSize contentSize = [c2ell.labelText.text  boundingRectWithSize:CGSizeMake(ScreenWidth-IPHONEWIDTH(28*3+140),MAXFLOAT ) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:IPHONEWIDTH(30)],NSParagraphStyleAttributeName:paragraphStlyle} context:NULL].size;

c2ell.labelText.size =CGSizeMake(contentSize.width, contentSize.height);

案例3:添加下划线

我给按钮添加下滑线,比如按钮显示文本为电话号码,点击就可以拨打电话

UILabletext去掉乱码 控制颜色 行高 自定义大小 。显示不同的字体颜色、字体大小、行间距、首行缩进、下划线等属性(NSMutableAttributedString)

NSMutableAttributedString *str = [[NSMutableAttributedStringalloc]initWithString:_phoneBtn.titleLabel.text];

NSRange strRange = {0,[strlength]};

[str addAttribute:NSUnderlineStyleAttributeNamevalue:[NSNumbernumberWithInteger:NSUnderlineStyleSingle]range:strRange];

[_phoneBtnsetAttributedTitle:strforState:UIControlStateNormal]