先把关键代码粘贴出来给大家看,总体思路是酱紫的。
1.给模型cell添加一个辅助属性,用来保存cell高度,笔者这里辅助属性名称叫做cellHeight
。
2.根据indexPath.row
拿出对应的cell,如果cell的cellHeight
属性值为0,那么就去计算cell的高度,然后保存到cellHeight
中,再将cellHeight
返回出去。
3.如果cell的cellHeight
属性值不为0,那么直接返回出去就OK了。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
FKTopicDetailModel *topicDetailModel = self.topicDetailModelArrM[indexPath.row];
if (topicDetailModel.cellHeight == 0) {
CGSize textSize = CGSizeMake(KEY_WINDOW.width - 2 * 16, MAXFLOAT);
NSDictionary *textAttr = @{NSFontAttributeName : CHINESE_PingFangRegular(15)};
CGFloat height = [topicDetailModel.topicDescription boundingRectWithSize:textSize options:NSStringDrawingUsesLineFragmentOrigin attributes:textAttr context:nil].size.height;
// cellBaseHeight方法是用于获取固定高度值的。
topicDetailModel.cellHeight = [FKTopicTvCell cellBaseHeight] + height;
}
return topicDetailModel.cellHeight;
}
注意点:
计算文本高度时,笔者这里调用了boundingRectWithSize:options:attributes:context:
方法,切记第二个枚举参数不要传kNilOptions
(笔者经常传kNilOptions,偷懒嘛,哈哈),kNilOptions
实际上等于0,但是这个方法的枚举0对应的值是不存在的,如果穿入kNilOptions
那么字符串高度计算就会失败。
网友评论