关闭

masonry + 自适应cell高度

标签: masonry自适应高度cell
5242人阅读 评论(3) 收藏 举报
分类:

  // ===== 2017-07-27)添加内容 

     提供Demo链接:http://download.csdn.net/detail/red_coraldown/9912546 

      描述: 该Demo 应用到Masonry 、MJExtension资源库,并展示了一些布局技巧和 数据模型转换的一些使用方法。

      温馨提示: 如果UITableViewCell上面存在UIlabel并且自适应多行展示的话,记得设置UIlabel的

                           preferredMaxLayoutWidth属性(解决iOS 8.4的系统中,会出现不能精确计算和展示label的问题

      欢迎各位大神留言批评指正!

/// =================

       在之前各种找自适应cell,都感觉代码好多,现在又得结合masonry来自动计算cell的高度,在网上查找各位大神的办法,就是感觉代码好多,经过半天的艰苦奋斗,终于找出来了一个简单的办法,代码看着很少哟!!

       但是要想实现这个功能的话,你得准备好masonry框架,可通过cocoapods方法或者手动添加导入实现,手动导入masonry的下载链接 https://github.com/liuyanlllyyy/masnory  ,当然你也可以选择到 github  去搜索masonry 也是一样的,下面就给大家描述一下我研究出来的masonry + 自适应cell高度的方法:

     

      首选,你要对masonry 的一些功能实现有所了解,比方说,UILabel  在masonry下设置顶部和左侧,仅仅只设置这两个约束条件,不进行该控件的其它约束设置的时候,这时他的高度和宽度是自适应的,可以无限加长(在你尚未设置右侧约束或者宽度或者

numberOfLines != 0;的时候),也可以无线加宽(在你尚未设置底部约束和高度或者numberOfLines = 0的时候),等等功能可学习masonry  demo;

        在这里UItableView的一些基本使用就不做详细说明了,基本上实现tableview的那几个常用的dataSource 和 delegate 方法,实现这些方法后,需要以下步骤实现:


    第一步 : 在tableview 所在的类里面,创建一个c存储ell高度全局变量   

                      float cellHeight;


   第二步: 你可以选择给该属性  cellHeight 一个默认的高度。比方说 : cellHeight = 60;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

                  的实现方法里面实现自定义cell的一个私有方法,我的demo如下 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    AutoSizeFitHeightTableViewCell *autoFitHeightCell = [tableView dequeueReusableCellWithIdentifier:[AutoSizeFitHeightTableViewCell identifier]];
    if (!autoFitHeightCell) {
        autoFitHeightCell = [[AutoSizeFitHeightTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[AutoSizeFitHeightTableViewCell identifier]];
    }
    //**********************************************
    /**
     *  此处进行您的数据复制操作
     */
    //**********************************************
    
    //然后获得当前cell高的的数值存储
    cellHeight = [autoFitHeightCell getAutoCellHeight];
    
    return autoFitHeightCell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    //返回存储的高度
    return cellHeight;
}

      第三步: 自定义cell中的方法实现  ,cell中其它控件布局实现用masonry方法实现即可,具体可查阅masonry的demo

//- (float)getAutoCellHeight {
//    
//    [self layoutIfNeeded];
//
//    /**
//     *    self.最底部的控件.frame.origin.y      为自适应cell中的最后一个控件的Y坐标
//     *    self.最底部的空间.frame.size.height   为自适应cell中的最后一个控件的高
//     *    marginHeight    为自适应cell中的最后一个控件的距离cell底部的间隙
//     */
//    return  self.最底部的控件.frame.origin.y + self.最底部的空间.frame.size.height + marginHeight;
//    
//}

      

      第四步:  也是最重要的一点,在你的自定义cell中,有UILabel控件的,其高度也要计算在cell的高度,你通过masonry方法进行控件布局,此时你又想让label自适应的时候,记得要给label一个最大的高度,例如这样:

 make.width.lessThanOrEqualTo(SCREEN_WIDTH -70); 其中 SCREEN_WIDTH 为当前屏幕宽度,括号中的值可自行定义,这样可以避免label 高度不准确的问题


通过以上操作步骤,基本上自适应cell高度就搞定了,这些是个人理解的一个自适应cell高度的办法,诸位在查阅的时候发现什么问题、错误或者有好的建议的时候,欢饮各位留言或者,我会及时更正的,并向诸位学习新的知识,大家一起进步,谢谢各位!!!


 

2
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45864次
    • 积分:1056
    • 等级:
    • 排名:千里之外
    • 原创:52篇
    • 转载:6篇
    • 译文:10篇
    • 评论:4条
    文章分类
    最新评论