masonry + 自适应cell高度

来源:互联网 发布:压力传感器 淘宝 编辑:程序博客网 时间:2024/06/06 05:55

        在之前各种找自适应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
原创粉丝点击