最近寫(xiě)項(xiàng)目,其中一個(gè)控件需要展示從后臺(tái)請(qǐng)求來(lái)的數(shù)據(jù),并做相應(yīng)的大小更改。
后臺(tái)請(qǐng)求得來(lái)的字符串:
NSString *str1 = @"12.00~13.00%";
NSString *str2 = @"14.00~15.00%";
NSString *str3 = @"16.00%";
需要顯示為圖1樣式

當(dāng)數(shù)據(jù)格式固定,數(shù)字穩(wěn)定在兩位數(shù)之間,基本的字符串操作就可以達(dá)到想要的效果:
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];
這樣簡(jiǎn)單根據(jù)“%”字符的index,可以通過(guò)計(jì)算給“%”設(shè)置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;
但是一旦請(qǐng)求得來(lái)的數(shù)字變化為個(gè)位數(shù),如7.5%時(shí),下標(biāo)發(fā)生變化,這樣的計(jì)算方法就會(huì)出問(wèn)題了。
因此,經(jīng)過(guò)重新思考,得來(lái)新的方法:
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;
}
這樣通過(guò)重新分割字符串,得到“%”的位置,不論傳入的數(shù)字是一位數(shù)還是兩位數(shù),一鍵搞定!