如何在一行显示不同颜色大小,不同属性的字符串呢?很多人都曾经遇到这个问题,刚巧前不久我也遇到了,在这里介绍一下解决方法。
首先,我们一般用Label来显示字符串,但这里我们用
UIView来显示,一种是重绘文字,但这个太麻烦,我介绍一个简单的吧。就是用NSMutableAttributedString,代码段如下:
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;这个才能让文字清晰。