美文网首页SB Cell
使用AutoLayOut根据文本显示不等高的cell

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

作者: iOSWoden | 来源:发表于2015-12-29 00:39 被阅读92次

    这篇文章主要用于兼容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的专栏,这个作者写得很详细,有兴趣可以去看看

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ohxihttx.html