iOS 进阶

iOS-如何计算cell高度/自定义不等高cell

2017-09-04  本文已影响72人  IMKel

先把关键代码粘贴出来给大家看,总体思路是酱紫的。
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那么字符串高度计算就会失败。

上一篇下一篇

猜你喜欢

热点阅读