在项目开发过程中有时候会用到一段介绍文字需要不同的颜色以及行间距,下面的代码就可以实现,供大家参考
NSString *wordStr = [NSString stringWithFormat:@"应监管要求,您需要阅读并确认以下信息才可以继续操作\n尊敬的客户:\n根据您填写的《风险承受能力调查问卷》,本公司对您的风险承受能力进行了综合评估,评估结果如下:您的风险承受能力为%@,您适合购买%@。",self.riskType,self.riskProductType];
self.wordLabel = [[UILabel alloc] init];
self.wordLabel.textColor = [UIColor colorWithHexString:@"#4C4C4C"];
self.wordLabel.numberOfLines = 0;
NSRange blueColorRange = [wordStr rangeOfString:@"《风险承受能力调查问卷》"];
NSRange riskTypeRange = [wordStr rangeOfString:self.riskType];
NSRange riskProductRange = [wordStr rangeOfString:self.riskProductType];
NSMutableParagraphStyle *wordStyle = [[NSMutableParagraphStyle alloc] init];
[wordStyle setLineSpacing:10];
NSDictionary *wordDic = @{NSFontAttributeName:kSystemFont_15,NSParagraphStyleAttributeName:wordStyle};
NSMutableAttributedString *wordLabelAttStr = [[NSMutableAttributedString alloc] initWithString:wordStr attributes:wordDic];
[wordLabelAttStr addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithHexString:@"#2b81ea"] range:blueColorRange];
[wordLabelAttStr addAttribute:NSForegroundColorAttributeName value:[UIColor orangeColor] range:riskTypeRange];
[wordLabelAttStr addAttribute:NSForegroundColorAttributeName value:[UIColor orangeColor] range:riskProductRange];
self.wordLabel.attributedText = wordLabelAttStr;
CGFloat height = [self getHeightLineWithString:wordStr withWidth:kDeviceWidth - 20 withFont:kSystemFont_15];
self.wordLabel.frame = CGRectMake(10, 20, kDeviceWidth - 20, height);
[self.wordBGView addSubview:self.wordLabel];
self.riskType
和 self.riskProductType 是从后台获取到的数据 分别对应图上的积极型 和 高/中/低风险等级产品
#pragma mark - 根据字符串计算label高度
- (CGFloat)getHeightLineWithString:(NSString *)string withWidth:(CGFloat)width withFont:(UIFont *)font {
//1.1最大允许绘制的文本范围
CGSize size = CGSizeMake(width, 2000);
//1.2配置计算时的行截取方法,和contentLabel对应
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:10];
//1.3配置计算时的字体的大小
//1.4配置属性字典
NSDictionary *dic = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:style};
//2.计算
//如果想保留多个枚举值,则枚举值中间加按位或|即可,并不是所有的枚举类型都可以按位或,只有枚举值的赋值中有左移运算符时才可以
CGFloat height = [string boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:dic context:nil].size.height;
return height;
}
下面附上效果图