iOS label代码自适应高度宽度

2019 年 3 月 12 日 CocoaChina

最近有点闲功夫,自己总结了一下label自适应的几种方式,现在分享给大家,大概有以下几种方法:


第一种: 


UILabel *label = [[UILabel alloc] init];  

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1]; 

label.text = @"大师傅好搜啊发"

label.numberOfLines = 0

CGSize size = CGSizeMake(100, MAXFLOAT);//设置高度宽度的最大限度 CGRect rect = [label.text boundingRectWithSize:size options:NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:20]} context:nil];

label.frame = CGRectMake(100100, rect.size.width, rect.size.height);  self.view addSubview:label];


其实就是使用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context 这个方法


参数:

size:宽高限制,用于计算文本绘制时占据的矩形块。


options: 文本绘制时的附加选项


NSStringDrawingUsesLineFragmentOrigin//整个文本将以每行组成的矩形为单位计算整个文本的尺寸   


 NSStringDrawingUsesFontLeading//以字体间的行距


NSStringDrawingUsesDeviceMetrics //计算文本尺寸时将以每个字或字形为单位来计算。  


 NSStringDrawingTruncatesLastVisibleLine//计算文本尺寸时将以每个字或字形为单位来计算。

可以组合试一下达到自己想要的效果


attributes:对字体、颜色、行距、字间隔等等一些设置,使用字典来做一些属性设置


context:上下文,该参数可为 nil 。


第二种:


UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(1001001000)];

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];

label.text = @"我会自己去适应";

label.numberOfLines = 0;

[label sizeToFit];

[self.view addSubview:label];


其实就是使用 [label sizeToFit];让label自己去适应


或者使用sizeThatFits:方法自己定义宽高


CGSize size = [label sizeThatFits:CGSizeMake(100, MAXFLOAT)];


label.frame = CGRectMake(100, 100, size.width, size.height);


第三种:


UILabel *label = [[UILabel alloc] init];

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];

label.text = @"我会自己去适应宽度的";

label.font = [UIFont systemFontOfSize:50];

CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:50]}];

//ceilf()向上取整函数, 只要大于1就取整数2. floor()向下取整函数, 只要小于2就取整数1.

CGSize adaptionSize = CGSizeMake(ceilf(size.width), ceilf(size.height));

label.frame = CGRectMake(100100, adaptionSize.width, adaptionSize.height);

[self.view addSubview:label];


这种方法只能适应一行的宽高,高度也是根据字体的大小来变化的


希望大家能提出宝贵的意见,可以给我留言,如果还有别的疑问请发邮件到我的邮箱:namezyqyx@163.com


谢谢大家,如果你有更好的方法请告知,不胜感激。


作者:谁遇而安
链接:https://www.jianshu.com/p/6a0ca62009f2


本公众号转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系本公众号进行修改或删除【联系方式QQ : 3442093904  邮箱:support@cocoachina.com】。文章内容为作者独立观点,不代表本公众号立场。版权归原作者所有,如申请授权请联系作者,因文章侵权本公众号不承担任何法律及连带责任。

---END---

登录查看更多
0

相关内容

【KDD2020】自适应多通道图卷积神经网络
专知会员服务
120+阅读 · 2020年7月9日
专知会员服务
43+阅读 · 2020年7月7日
【KDD2020】多源深度域自适应的时序传感数据
专知会员服务
62+阅读 · 2020年5月25日
专知会员服务
42+阅读 · 2020年2月20日
北京市通勤出行特征与典型区域分析
智能交通技术
28+阅读 · 2019年7月19日
已删除
架构文摘
3+阅读 · 2019年4月17日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
教你实现超流行的骨架屏预加载动态效果
IMWeb前端社区
73+阅读 · 2018年11月27日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
OpenCV特征提取与图像检索实现(附代码)
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
Meta-Learning with Implicit Gradients
Arxiv
13+阅读 · 2019年9月10日
Labeling Panoramas with Spherical Hourglass Networks
Few Shot Learning with Simplex
Arxiv
5+阅读 · 2018年7月27日
VIP会员
相关资讯
北京市通勤出行特征与典型区域分析
智能交通技术
28+阅读 · 2019年7月19日
已删除
架构文摘
3+阅读 · 2019年4月17日
R_leaflet包_最易上手地图教程(一)
R语言中文社区
10+阅读 · 2019年3月6日
教你实现超流行的骨架屏预加载动态效果
IMWeb前端社区
73+阅读 · 2018年11月27日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
[机器学习] 用KNN识别MNIST手写字符实战
机器学习和数学
4+阅读 · 2018年5月13日
OpenCV特征提取与图像检索实现(附代码)
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
tensorflow LSTM + CTC实现端到端OCR
机器学习研究会
26+阅读 · 2017年11月16日
PyTorch 到底好用在哪里?
AI研习社
3+阅读 · 2017年10月27日
Top
微信扫码咨询专知VIP会员