如何在一行显示不同颜色大小,不同属性的字符串呢?很多人都曾经遇到这个问题,刚巧前不久我也遇到了,在这里介绍一下解决方法。
首先,我们一般用Label来显示字符串,但这里我们用 UIView来显示,一种是重绘文字,但这个太麻烦,我介绍一个简单的吧。就是用NSMutableAttributedStrin
g,代码段如下:
NSString
*str1 = @"AAAAA"
;
NSString *str2 = @"AAAAA";
NSString *str3 = @"AAAAA";
NSString *str4 = @"AAAAA";
NSString *longStr = [NSString stringWithFormat:@"%@%@%@%@", str1, str2, str3, str4];
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString: longStr];
[attStr addAttribute:(NSString *)kCTFontAttributeName value:(id)[UIFont systemFontOfSize:14] range:[longStr rangeOfString: longStr]];
[attStr addAttribute:(NSString *)kCTFontAttributeName value:(id)[UIFont systemFontOfSize:9] range:[longStr rangeOfString:str4]];
[attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor blackColor].CGColor range:[longStr rangeOfString: longStr]];
[attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:[longStr rangeOfString:str1]];
[attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor darkGrayColor].CGColor range:[longStr rangeOfString:str2]];
[attStr addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor grayColor].CGColor range:[longStr rangeOfString:str4]];
UIView *show = [[UIView alloc] initWithFrame:CGRectMake(10,10,200,200)];
CATextLayer *tl = [CATextLayer layer];
tl.contentsScale = [UIScreen mainScreen].scale;
tl.wrapped = YES;
tl.string = attStr;
tl.frame = show.bounds;
[show.layer addSublayer:tl];
这样,这个show就相当于一个label了,能显示文字了,这比重写drawrect方法方便多了。做这个的时候还有一点,默认情况下,文字是发虚的,不如正常的label清楚,所以要加一行 tl.contentsScale = [UIScreen mainScreen].scale;这个才能让文字清晰。