使用AutoLayOut根据文本显示不等高的cell

这篇文章主要用于兼容iOS7系统,在iOS8以上直接一句代码系统就可以帮你算出cell的高度,有兴趣的朋友可以自己搜下。以下列出这个例子的代码流程

  • 常规的创建一个控制器带一个tableview视图,在控制器.m文件中传递模型数据,这里注意下:在模型中加入一个存储cell高度的属性用于缓存cell高度,增强视图滑动的流畅性。

  • 通过xib自定义一个cell,在这个例子中的cell上加一个UILabel,并设置上下左右的约束。


    cell的内部约束
  • 在cell中有一个很重要的操作,UILable多行时必须设置preferredMaxLayoutWidth属性,不然系统无法确定UILabel的宽度

self.aLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width-16;
  • 实现tableview代理方法1,这个方法可以避免一初始化控制器系统就计算全部cell的高度,消耗资源,使用这个方法好处就是系统只会先算显示在屏幕的cell高度.
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 44;
}
  • 实现代理方法2,这个是重头戏,主要用到systemLayoutSizeFittingSize:这个方法就可以得到cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (_prototyCell == nil) {
        
        _prototyCell = [tableView dequeueReusableCellWithIdentifier:@"Custom"];
    }
    
    DataEntity *dataEntity = self.dataSource[indexPath.row];
    
    if (dataEntity.cellH<=0) {
        
        _prototyCell.aLabel.text = dataEntity.title;
        dataEntity.cellH = [_prototyCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+0.5;
    }
    return dataEntity.cellH;

}

写这篇文章是为了记录自己学习这个的过程,学习这个主要是在这里看到lishichao706的专栏,这个作者写得很详细,有兴趣可以去看看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 1,527评论 2 7
  • 九十风云转瞬间,军魂铸就永难删。 雪山草地任危苦,万水千山多险艰。 终竟满腔腾热血,曾经一路克雄关。 人民子弟兵威...
    雪窗_武立之阅读 555评论 0 6
  • 我不能 把爱的全部 分一份给你 想要 你就全部拿去 我爱的池塘清澈见底 没有猎奇者期待的秘密 偶尔 你也能看见几条...
    Julien陆主欢阅读 364评论 7 6
  • 一笑万古春,一啼万古愁。此情非你莫属,此貌非你莫有。 李碧华在《霸王别姬》开篇便说:每一个人,有其依附之物。娃娃...
    秋山纱兰阅读 1,373评论 1 6
  • 文/韦剑 挥手告别的车站 泪眼朦胧的人 转头掩不住的忧伤 从此化作了思念 回首间 相送人已远去 最后的一幕 才发现...
    韦剑阅读 324评论 0 1