iOS更改字符串中特定字符大小
最近写项目,其中一个控件需要展示从后台请求来的数据,并做相应的大小更改。
后台请求得来的字符串:
NSString *str1 = @"12.00~13.00%";
NSString *str2 = @"14.00~15.00%";
NSString *str3 = @"16.00%";
需要显示为图1样式
(图1)当数据格式固定,数字稳定在两位数之间,基本的字符串操作就可以达到想要的效果:
NSString *numStr = @"12.00~13.00%";
NSString *numStr1 = [numStr stringByReplacingOccurrencesOfString:@".00" withString:@""];
NSString *numStr2 = [numStr1 stringByReplacingOccurrencesOfString:@"~" withString:@"% - "];
NSMutableAttributedString *numText=[[NSMutableAttributedString alloc]initWithString:numStr2 attributes:nil];
这样简单根据“%”字符的index,可以通过计算给“%”设置font值:
[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(2, 1)];
[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(8, 1)];
// UILabel *circleivNumlab;
circleNumlable.attributedText= numText;
但是一旦请求得来的数字变化为个位数,如7.5%时,下标发生变化,这样的计算方法就会出问题了。
因此,经过重新思考,得来新的方法:
NSRange range1=NSMakeRange([self getSubStrNumFromStr:numText WithLocation:YES], 1);
NSRange range2=NSMakeRange(numText.length-1, 1);
[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(range1, 1)];
[numText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(range2, 1)];
// UILabel *circleivNumlab;
circleNumlable.attributedText= numText;
- (NSInteger)getSubStrNumFromStr:(NSString *)str WithLocation:(BOOL)first
{
if (str.length>0) {
NSArray *nums=[str componentsSeparatedByString:@"% - "];
if (first && nums.count>0) {
return [[nums firstObject] length];
}else if (first==NO && nums.count==2){
return [[[[nums lastObject] componentsSeparatedByString:@"%"]firstObject]length];
}
}
return 0;
}
这样通过重新分割字符串,得到“%”的位置,不论传入的数字是一位数还是两位数,一键搞定!