您的位置:首页 > 移动开发 > IOS开发

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中,原理一致,只要灵活运用即可.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息