最近寫項(xiàng)目裹粤,其中一個(gè)控件需要展示從后臺請求來的數(shù)據(jù)璃哟,并做相應(yīng)的大小更改。
后臺請求得來的字符串:
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];
這樣簡單根據(jù)“%”字符的index,可以通過計(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;
但是一旦請求得來的數(shù)字變化為個(gè)位數(shù)秤标,如7.5%時(shí)绝淡,下標(biāo)發(fā)生變化,這樣的計(jì)算方法就會出問題了苍姜。
因此牢酵,經(jīng)過重新思考,得來新的方法:
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;
}
這樣通過重新分割字符串衙猪,得到“%”的位置馍乙,不論傳入的數(shù)字是一位數(shù)還是兩位數(shù),一鍵搞定垫释!