我们经常会遇到需要cell高度自适应的情况 SDAutoLayout可以帮助你快速的实现这个功能

第一步 cell里面自定义 在这里只显示 姓名 电话 地址 三个控件

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{if (self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]){//创建控件self.labelUserName=[UILabel new];self.labelPhone=[UILabel new];self.labelAddress=[UILabel new];//添加控件  这里必须要 self.contentView 如果是self 测试过无法高度适配[self.contentView sd_addSubviews:@[self.labelUserName,self.labelPhone,self.labelAddress]];self.labelUserName.font=[UIFont systemFontOfSize:16];self.labelPhone.font=[UIFont systemFontOfSize:16];self.labelAddress.font=[UIFont systemFontOfSize:16];//设置地址多行显示self.labelAddress.numberOfLines=0;//下面的self 要改为self.contentView 才有效果self.labelUserName.sd_layout.leftSpaceToView(self.contentView, 10).topSpaceToView(self.contentView,10).widthIs(80).heightIs(20);self.labelPhone.sd_layout.rightSpaceToView(self.contentView, 20).topEqualToView(self.labelUserName).widthIs(120).heightIs(20);//autoHeightRatio(0) 设置自适应高度 这个很重要//setSingleLineAutoResizeWithMaxWidth 设置宽度自适应 我这里是 左边距//和用户名对齐 右边距离屏幕20self.labelAddress.sd_layout.leftEqualToView(self.labelUserName).topSpaceToView(self.labelUserName, 10).rightSpaceToView(self.contentView, 20).autoHeightRatio(0);
//        [self.labelAddress setSingleLineAutoResizeWithMaxWidth:200];}return self;
}

第二步 创建实体内容model 相当于cell里面的实体数据

比如我们平时都会在 cellForRowAtIndexPath 里面进行对控件的赋值UserInfoBean *bean=self.dataArray[indexPath.row];cell.labelUserName=bean.userName;

但是我们现在要在在model对cell里的控件赋值

步骤一 创建实体model

//建议取名cellModel 这样知道是cell的model
@interface UserInfoCellModel : NSObject
//下面数据是你需要给cell控件里显示的内容
@property(nonatomic,strong)NSString*userName;
@property(nonatomic,strong)NSString*phone;
@property(nonatomic,strong)NSString*address;

这样就创建好了 model

步骤二 在你的自定义cell h文件 里添加声明

#import <UIKit/UIKit.h>
#import "UserInfoCellModel.h"
@interface UserInfoTableViewCell : UITableViewCell
@property(nonatomic,strong)UILabel*labelUserName;
@property(nonatomic,strong)UILabel*labelPhone;
@property(nonatomic,strong)UILabel*labelAddress;
@property (nonatomic, strong) UserInfoCellModel *model;

在cell.m文件里添加如下代码

- (void)setModel:(UserInfoCellModel *)model
{_model = model;self.labelUserName.text=model.userName;self.labelPhone.text=model.phone;self.labelAddress.text=model.address;//设置控件高度自适应 前面是要自适应的控件  后面是这个控件离你的cell底部相距距离 我这里设置是离底部为10[self setupAutoHeightWithBottomView:self.labelAddress bottomMargin:10];}

第三步 在viewController里

步骤一 创建一个 装model的数组 初始化

@property(nonatomic,strong)NSMutableArray *modelArray;self.modelArray=[[NSMutableArray alloc]initWithCapacity:0];

步骤二 添加模拟数据 请求服务器的话就是改为真实数据

UserInfoCellModel *bean=[UserInfoCellModel new];bean.userName=@"测试1";bean.phone=@"13912345676";bean.address=@"简介:周杰伦(Jay Chou),1979年1月18日出生于台湾省新北市,华语流行男歌手、演员、词曲创作人、MV及电影导演、编剧及制作人。2000年被吴宗宪发掘,发行首张个人专辑《Jay》。2001年发行专辑《范特西》。2002年在中国、新加坡、马来西亚、美国等地举办首场个人世界巡回演唱会";UserInfoCellModel *bean1=[UserInfoCellModel new];bean1.userName=@"测试2";bean1.phone=@"13912345676";bean1.address=@"简介:许嵩,中国内地流行乐男歌手,音乐创作人,1986年5月14日生于安徽合肥,毕业于安徽医科大学。2009年独立出版首张词曲全创作专辑《自定义》;2010年出版第二张词曲全创作专辑《寻雾启示》;2011年加盟海蝶音乐,推出第三张词曲全创作专辑《苏格拉没有底》;2012年7月发表第四张全创作专辑《梦游计》;2013年8月出版个人摄影随笔集《海上灵光》;2014年8月推出第五张全创作专辑《不如吃茶去》。2016年4月发行第六张个人专辑《青年晚报》。";UserInfoCellModel *bean2=[UserInfoCellModel new];bean2.userName=@"测试3";bean2.phone=@"13912345676";bean2.address=@"简介:吴亦凡(Kris),1990年11月6日出生于广东省广州市,演员,歌手。2007年,吴亦凡通过S.M. GlobalAudition Canada加入了韩国SM娱乐公司,参加练习生培训。2012年作为EXO组合成员正式出道,并成为EXO-M队长。2014年5月15日,吴亦凡正式向首尔中央地方法院请求判决与SM娱乐公司“专属合同”无效。之后,吴亦凡回归中国国内,担任徐静蕾执导的电影《有一个地方只有我们知道》男主角,并于7月发行个人单曲《时间煮雨》;同年8月,电影《夏有乔木》确定由吴亦凡出演夏木;同年11月,发布个人参与创作的电影同名主题曲《有一个地方》。12月12日确定与冯小刚、张涵予等合作出演电影《老炮儿》。12月26日确定担任电影《致青春2原来你还在这里》男主角程铮。";UserInfoCellModel *bean3=[UserInfoCellModel new];bean3.userName=@"测试4";bean3.phone=@"13912345676";bean3.address=@"简介:校长,90后创作型艺人,对音乐有浓厚的兴趣 嗓音清澈高亢善于演绎多种演唱风格,并擅长创作多种形式音乐,以旋律性见长,在网络上歌声也赢得许多观众。";[self.modelArray addObject:bean];[self.modelArray addObject:bean1];[self.modelArray addObject:bean2];[self.modelArray addObject:bean3];

步骤三 cellForRowAtIndexPath里面

//给cell里面的model赋值  然后他会给自定义cell里面的setModel方法里面的控件赋值cell.model = self.modelArray[indexPath.row];/** 启用cell frame缓存(可以提高cell滚动的流畅度, 目前为cell专用方法,后期会扩展到其他view) */[cell useCellFrameCacheWithIndexPath:indexPath tableView:self.tableUserInfo];

步骤四 heightForRowAtIndexPath方法里面自适应高度 不能填写固定高度 否则自适应就没有意义了

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{// model:填写model数组 keyPath:这里填写的是你在自定义cell里那个model变量  如下图   cellClass:你的cell 最后一个 contentViewWidth copy下面贴出来的代码就行return [self.tableUserInfo cellHeightForIndexPath:indexPath model:self.modelArray[indexPath.row] keyPath:@"model" cellClass:[UserInfoTableViewCell class] contentViewWidth:[self cellContentViewWith]];
}
@interface UserInfoTableViewCell : UITableViewCell
@property(nonatomic,strong)UILabel*labelUserName;
@property(nonatomic,strong)UILabel*labelPhone;
@property(nonatomic,strong)UILabel*labelAddress;
//这个model变量就是上面的keyPath要填写的 你这里取名model那里就要填写model
@property (nonatomic, strong) UserInfoCellModel *model;
- (CGFloat)cellContentViewWith
{CGFloat width = [UIScreen mainScreen].bounds.size.width;// 适配ios7横屏if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait && [[UIDevice currentDevice].systemVersion floatValue] < 8) {width = [UIScreen mainScreen].bounds.size.height;}return width;
}

最后看下效果图

这样就高度适配成功了

Demo下载

SDAutoLayout快速实现Cell的高度自适应相关推荐

  1. CSS快速学习10:高度自适应

    高度自适应 网页布局中经常要定义元素的宽和高.但很多时候我们希望元素的大小能够根据窗口或子元素自动调整,这就是自适应. 元素自适应在网页布局中非常重要,它能够使网页显示更灵活,可以适应在不同设备.不同 ...

  2. 2.3 在表格中嵌套另一个表格并使Cell的高度自适应 [iOS开发中的神兵利器]

    原文:http://coolketang.com/staticCoding/5a995102fe88c21c80b2e3f6.html 1. 本节课将为您演示,如何在表格中嵌入另一个表格,从而创建更加 ...

  3. (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度

    转载自:http://www.jianshu.com/p/f3609cd9392e 有了预估高度这个先决条件,一切都好说了.我们直接从代码入手. 接下来我们实现一个简单的信息展示功能,如: Demo最 ...

  4. IOS TableView的Cell高度自适应,UILabel自动换行适应

    需求: 1.表格里的UILable要求自动换行 2.创建的tableViewCell的高度会自动适应内容的高度 一.用xcode构建项目,创建一个有tableView的视图,用纯代码的形式实现: 1. ...

  5. 简单的TableViewCell高度自适应(只有Label,仅当参考思路)

    在iOS开发中或多或少的都会碰到TableViewCell高度自适应,那么今天这篇文章就简单的介绍一下如何给tableViewCell自适应高度 #ViewController copy @inter ...

  6. 让tableView的高度等于contentSize的高度、动态调整tableView的高度、tableView的高度自适应布局...

    文章概要: 1.简介下,tableView中的内容如何高度自适应的布局 2.如何做到让tableView的高度动态调整 还是看图作文吧- 首先,tableView的高度就是用户能够看见里面更大世界的那 ...

  7. Text Kit框架——动态字体及cell动态高度

    由于Apple近几年在iOS系统的不断改进过程中添加了许多新的特性和功能,这使得iOS系统对文本的渲染能力有了大大的提升.在iOS7中我们就已经能感觉到在文本渲染方面有了很大改进和提升.现在iOS8发 ...

  8. UITableView根据表格内容进行高度自适应与使用Masonry实现根据内容进行宽度自适应和高度自适应

    Masonry和SDAutoLayout不同:SDAutoLayout需要上下左右四个方向都显示性的进行约束,虽然当高度和宽度自适应时,可以少一个高度约束,但是也应有对应布局处理设置.因为标签是有顶部 ...

  9. iOS UITableView+FDTemplateLayoutCell 配合AutoLayout分分钟教你实现类似微信朋友圈的动态高度自适应

    11.30日更新,实现了简单的微信朋友圈,点赞,评论,图片,高度自适应,下拉展开等各种效果Demo 点击打开链接 11.10更新 这种高度自适应的Label切记一定要加上这个属性 preferredM ...

最新文章

  1. Java Swing 探索(一)LayoutManager
  2. c语言中字符减减自符意思,C语言中的自加自减运算
  3. TextBox中的KeyDown 时间不能响应的问题!
  4. [WP8.1UI控件编程]Windows Phone自定义布局规则
  5. pkl格式数据 训练集_Detectron2训练自己的数据集手把手指导
  6. Ajax完整资料加代码
  7. 你发现了吗?数学还能这么美
  8. std::vector 从大到小排序
  9. mysql导入sql文件过大或连接超时的解决办法
  10. .net 根据模板创建html文件
  11. Docker常见问题
  12. OpenCart多图片拖放式上传管理器
  13. [PHP] - visitFile()遍历指定文件夹
  14. PHP面向对象之领域模型+数据映射器
  15. 【知识点总结】大数据技术原理与应用
  16. c++语言循环读写文件夹,【C++探索之旅】第一部分第十课:文件读写,海阔凭鱼跃...
  17. 量子计算机原理 纠缠,白话量子计算机原理【前面的那个有错误,重新理清了一下思路】...
  18. java怎么导包_java包与导包
  19. 斜杠(右斜杠)【/】 与 反斜杠(右斜杠)【\】
  20. [转]Xmanager连接Linux远程桌面(后面添加了自己的部分)

热门文章

  1. 搭建 discus 论坛
  2. 电视+私人影院+KTV+游戏厅,爽!
  3. onload与ready方法的区别
  4. NAO机器人——运动控制(3)
  5. 南加大计算机本科学费,解析|南加州大学学费及生活费
  6. 【小白入门】用Python增加文章阅读量
  7. 给对象做的暖心微信公众号推送(可自定义信息和天气预报的城市)
  8. linux nobody用户是什么 nobody用户介绍
  9. Android动画学习笔记-Android Animation
  10. python接入微信_使用python接入微信聊天机器人