masonry + 自适应cell高度

原创 2016年05月30日 17:01:56

  // ===== 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高度的办法,诸位在查阅的时候发现什么问题、错误或者有好的建议的时候,欢饮各位留言或者,我会及时更正的,并向诸位学习新的知识,大家一起进步,谢谢各位!!!


 

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Masonry适配——(3)UILable如何设置多行显示

UILabel在使用过程中,一个重要的特性是可以进行多行显示,或者是自定义显示行数。同时呢,在设置多行显示的过程中,还可以计算出label所需要的高度。 当在使用frame设置时,可以很好的计算其高度...

cell自适应高度-masonry适配

今天要提的是cell上label自适应高度 用一张图片说明今天要做的任务,其中做三种情况的cell适配; 首先完成VC里面的代码: 其中: self.tableView....

ios Masonry怎么以纯代码的方式计算cell高度

我们很多iOS开发者应该都用过autolayout ,  如果用故事版和XIB的话非常好用,但是如果用纯代码的方式写的话就感觉这东西太啰嗦了,一点都不好用,还不如frame来得快,然而在公司项目中一般...

Masonry自动布局详解六:tableviewCell布局

Masonry自动布局详解六:tableviewCell布局 说到iOS自动布局,有很多的解决办法。有的人使用xib/storyboard自动布局,也有人使用frame来适配。对于前者,笔者并不喜欢,...

Masonry适配——(7)UITableView中自定义UITableViewCell高度自适应及计算

https://github.com/potato512/SYDemo_Masonry 在UITableView列表的使用中,因为在自定义的UITableViewCell中页面相对复杂,所以会出现每...

label中文字的自适应--使用masonry

之前写过一篇博客--《label中文字的自适应》,其中用到的是设置frame来计算高度。今天这篇博客要利用masonry来使单元格中的文字进行自适应。不啰嗦,直接上代码:  //显示多行,自适应高...

iOS UI设计: 在Autolayout自适应的情况下tableviewcell高度自适应

经常查阅资料和自己的研究,现在有一个较为高效的方法。 首先前提条件 1. Cell 用xib方式自定义。 内嵌有 icon头像 labelview多行文本框 2. 导致高度变化的就是这个多行文本...

UITableViewCell使用Masonry进行自动计算行高的问题

UITableViewCell使用Masonry进行自动计算行高的问题开发中,Masonry进行UI界面的约束,越来越方便,但是在含有label内容不定的cell上,约束很容易出问题,一旦设置不当,就...

Masonry Label的宽度自适应

当 label想要宽度自适应时 加上下面的话 “Content Compression Resistance”和“Content Hugging”1.宽度不够时[_label1 setConten...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:masonry + 自适应cell高度
举报原因:
原因补充:

(最多只允许输入30个字)