iOS雨笙 lable自适应高度(多用于tableview的自定义cell中)
2015-10-07 21:14
274 查看
本文主要介绍的是UILable中的文字自适应高度.很多种情况下,多个lable中文字的数量是不能确定的,所以我们无法给这些lable一个确切的高度,这里就需要lable去自适应其自己的高度,这种情形多用于tableview中自定义cell中,代码比较简单,下面列举一个小例子,望大家能够灵活运用.
先创建一个UILable,它的frame是给定的,并且设置字号大小;
// 创建一个UILable
UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 300, 100)];
// 设置lable的字号为16,这里必须要设置,根据字号来判断高度
lable.font = [UIFont systemFontOfSize:16];
// 要输入的字符串内容,要足够长
NSString *str = @"东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.
东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.
东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.";
lable.text = str;
// 让lable折行显示
lable.numberOfLines = 0;
下面要进行自适应高度了,首先创建一个字体大小的字典,这里字体大小的号一定要和上面的一致.这个字典下面要用:
// 创建一个字体大小的字典
NSDictionary *dic = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:16]
forKey:NSFontAttributeName]; 下面就要计算一个300宽(宽是不会变的,一开始给定多少就是多少,只有高会变)的lable的frame了
// 返回值是CGRECT,下面这个CGSizeMake中的高度1000000是随意给定的,条件只有一个,能保证这个高度比显示完整字符串后的
lable高度要高,就是一个不可能到达的高度
// NSStringDrawingUsesLineFragmentOrigin的意思是按照文本的矩形区域返回高度
CGRect frame = [str boundingRectWithSize:CGSizeMake(300, 1000000)
options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
NSLog(@"%f",frame.size.height);
// 下面三行表示重新给lable赋值frame
CGRect newFrame = lable.frame;
newFrame.size.height = frame.size.height;
lable.frame = newFrame;
这样,一个自适应的lable的高度就完成了,这是最基本的方式,也是最简单的方式,大多用于tableview中的cell中,原理一致,只要灵活运用即可.
先创建一个UILable,它的frame是给定的,并且设置字号大小;
// 创建一个UILable
UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 300, 100)];
// 设置lable的字号为16,这里必须要设置,根据字号来判断高度
lable.font = [UIFont systemFontOfSize:16];
// 要输入的字符串内容,要足够长
NSString *str = @"东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.
东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.
东京下雨,湿了巴黎.东京下雨,湿了巴黎.东京下雨,湿了巴黎.";
lable.text = str;
// 让lable折行显示
lable.numberOfLines = 0;
下面要进行自适应高度了,首先创建一个字体大小的字典,这里字体大小的号一定要和上面的一致.这个字典下面要用:
// 创建一个字体大小的字典
NSDictionary *dic = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:16]
forKey:NSFontAttributeName]; 下面就要计算一个300宽(宽是不会变的,一开始给定多少就是多少,只有高会变)的lable的frame了
// 返回值是CGRECT,下面这个CGSizeMake中的高度1000000是随意给定的,条件只有一个,能保证这个高度比显示完整字符串后的
lable高度要高,就是一个不可能到达的高度
// NSStringDrawingUsesLineFragmentOrigin的意思是按照文本的矩形区域返回高度
CGRect frame = [str boundingRectWithSize:CGSizeMake(300, 1000000)
options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
NSLog(@"%f",frame.size.height);
// 下面三行表示重新给lable赋值frame
CGRect newFrame = lable.frame;
newFrame.size.height = frame.size.height;
lable.frame = newFrame;
这样,一个自适应的lable的高度就完成了,这是最基本的方式,也是最简单的方式,大多用于tableview中的cell中,原理一致,只要灵活运用即可.
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- windows开发记事本程序纪实(一)界面篇
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- 基于UIControl控件实现ios点赞功能