Cell高度计算

有时每个tableviewcell中需要显示的文本字数是不确定的,因而需要给cell设置不同高度满足文本的显示,这里总结下常用的计算方法。

1. 手动计算

主要依赖以下方法计算出label的高度,需要给出label的宽度、使用的字体以及NSStringDrawing类别。

    CGRect labelRect = [label boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOriginattributes:@{NSForegroundColorAttributeName: [UIFont systemFontOfSize:14]} context:nil];

计算出label高度后,手动加入上下边距以及其他控件的高度、间距等数据,可以得到cell高度。


2. 使用tableview自动计算方法

iOS8之后加入了自动计算cell高度的方法,代码也非常简单。

tableView.estimatedRowHeight = 20.0f;
tableView.rowHeight = UITableViewAutomaticDimension;

使用这个方法需要注意,cell中的label需要有确定的边界,一般来说设置好label的宽度,以及与上方、下方的控件之间的间距即可。否则系统计算的结果会有错误。

这个方法使用比较方便,不需要自己进行计算,但是系统计算速度较慢,而且系统只会计算,不会给出cell高度,自己没办法缓存高度数据


3. 使用- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize

该方法计算可以直接获取cell高度数据,并且进行缓存。
与方法2一样,因为是系统计算高度,需要先确保label有确定的边界,才能得出正确的数据。

//首先,实例化一个cell,这里使用nib获取
     textCell = [[[NSBundle mainBundle] loadNibNamed:@"TextTableViewCell" owner:self options:nil] lastObject];

//获取文本数据后,给cell中的label赋值
     textCell.label.text = cellLabelText;

//调用方法计算cell高度
     CGSize cellSize = [textCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

//计算完所有cell高度并缓存后,传入高度数据刷新tableview即可
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath;
小结

方法2和方法3一般配合nib使用比较方便,注意给label设置好边距即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值