UITableViewCell高度自适应Label高度

一般在开发的时候,写的Cell, 一般不会是绝对等高的,宽就不说了,一般就那么宽

高度随着cell里面内容的变化而变化的情况是常有的事

作为一枚菜鸟,我就知道两种方法可以让cell自适应高,先说一种不用自动布局的

1.自适应cell高(手动版)

核心方法:这个方法只能在iOS7之后使用,之前的方法很麻烦,就不说了(说白了就是根据字体大小计算你要填进去的字符串的size,前提是label的行数设置为0,也就是无限行)

- (CGSize)getTextHeightWithString:(NSString *)string{
   CGRect rect = [string boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]} context:nil];
    return  rect.size;
}
这里的几个参数:

1.就是放在一个多大的容器里(虚拟的容器,不然他怎么知道啥时候换行,当然也就不知道宽度),

这里基本就跟你的label一样宽,或者小一点,自己拿捏,宽度当然是不限,也可以填0

2.一系列参数,这里一般就用这俩,可以点进去看一下(好吧,其实我也不懂)

3.字符串属性,这里不赘述。可以调颜色字体大小。

4.没用过,直接nil

得到一个CGSize,就是这段字符串在刚才自己设置那个虚拟容器里的长宽,

如果不满一行,当然返回的宽就是字符串的宽,而不是你设置的虚拟框的宽,这个真的很方便(之前不满一行还得另外算)


如果只是需要高度,不妨直接返回rect.size.height 这样,直接拿到的高度就可以填到设置行高的代理方法里了

如果cell里有图片的话,在设置行高方法里加上图片高度就ok


2.利用autolayout

创建cell的自定义子类,加入xib,或者直接storyboard加入自定义cell

然后做约束,最重要的约束就是不要限制死cell里label的高,约束label的下边界和cell的下边界的距离

然后,就是在代码中添加两句话

//自动适应高(前提是做了自动布局的约束 )

tableView.estimatedRowHeight = tableView.rowheight //提供一个预估的高度值(这里其实填多少都行,一般就你的xib里cell多高,这个就填多高)

tableView.rowheight = UiTableViewAutomaticDimension

这个是直接设置tableView所有的cell,如果您另有所求,可以调用代理方法里设置预估高度和高度的方法

运行程序,当当当当,完成,如此简单。

好了,该说这个的缺点了,当你的cell中有不能确定高度的图片时。。。。疯掉了,这约束怎么做。

没办法,只能在代码里的代理方法里用高度加了(也可以做约束,可以实现,但是效果不好,很多图片无法很好适应,所以不推荐)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值