1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Java富文本设置行间距 设置行间距 字间距和计算富文本高度

Java富文本设置行间距 设置行间距 字间距和计算富文本高度

时间:2020-01-10 13:42:25

相关推荐

Java富文本设置行间距 设置行间距 字间距和计算富文本高度

上篇文章《富文本用法总结》详细码了关于富文本的一些用法,有介绍行间距的设置方法.在实际开发中经常需要根据后台返回的文字计算控件宽度和高度进行布局,这篇就配合上一篇来设置字间距和计算高度.

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 300, 800)];

label.layer.borderColor = [UIColor blackColor].CGColor;

label.numberOfLines = 0;

[self.view addSubview:label];

NSString * string = @"许多回忆 藏在心底\n总来不及 都告诉你\n和你一起 爬过山顶 入过海里\n难免粗心 时而大意\n难过开心 你都参与\n笑到抽筋 哭到决堤\n和你一起 想去东京 飞到巴黎";

// 初始化NSMutableAttributedString,并设置文字样式

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];

// 设置行间距

NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:10];

[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, string.length)];

// 设置字间距 NSKernAttributeName

// 取值为NSNumer 正值距离加宽,负值距离变窄

[attributedString addAttribute:NSKernAttributeName value:@(10) range:NSMakeRange(0, 20)];

[attributedString addAttribute:NSKernAttributeName value:@(-2) range:NSMakeRange(40, 20)];

label.attributedText = attributedString;

[label sizeToFit];

QQ1214-0@2x.png

之前一直用 sizeToFit 来让 label 自适应高度,下面通过字符串来计算获取 label 所对应的高度

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 300, 100)];

label.backgroundColor = [UIColor magentaColor];

label.numberOfLines = 0;

[self.view addSubview:label];

NSString * string = @"许多回忆 藏在心底\n总来不及 都告诉你\n和你一起 爬过山顶 入过海里\n难免粗心 时而大意\n难过开心 你都参与\n笑到抽筋 哭到决堤\n和你一起 想去东京 飞到巴黎";

// 初始化NSMutableAttributedString,并设置文字样式

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];

NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:10];

NSDictionary *dic = @{NSFontAttributeName:[UIFont systemFontOfSize:15 weight:UIFontWeightMedium], NSParagraphStyleAttributeName:paragraphStyle, NSKernAttributeName:@1.5f};

// 计算文字高度 这里固定了宽度计算高度,如果高度固定计算宽度的话就设置宽为 MAXFLOAT

CGSize size = [string boundingRectWithSize:CGSizeMake(300, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;

// 这里有个坑,如果上面 diction 内只设置行间距的话,下面计算高度的时候就不会识别\ n ,然而我也不知道为啥~~~~求解

[attributedString addAttributes:dic range:NSMakeRange(0, string.length)];

label.attributedText = attributedString;

label.frame = CGRectMake(50, 200, 300, size.height);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。