一、每个Cell高度不一致的一般做法:
1.自定义一个cell,在initWithStyle:reuseIdentifier:构造方法中添加所有可能显示的子控件
例如:添加一个图片
_introduceImage = [[UIImageViewalloc]init];
[self.contentViewaddSubview:_introduceImage];
2.新建一个模型类,比如StatusCellFrame,作用是:描述一个Cell内部所有子控件的frame属性
* 提供一系列CGRect类型的属性给Cell访问,(即对应cell中的每一个变量对应一个CGRect的变量)
* 提供一个接口来接收模型数据(比如Status)
* 在接收模型数据的同时,计算所有子控件的frame和cell的高度
3.回到控制器(代理和数据源)
1> 在tableView:heightForRowAtIndexPath:方法中利用StatusCellFrame返回cell的高度
2> 在tableView:cellForRowAtIndexPath:方法中
* 新建自定义cell
* 给Cell传递对应的StatusCellFrame对象
4. 自定义Cell
1> 提供接口接收StatusCellFrame对象
2> 在接收StatusCellFrame对象的同时,设置所有子控件的frame,设置所有子控件的数据
注意:
1、不能自动换行:要在1、中加入 .numberOfLines = 0,设置不限制行数,默认是1行;
在4、中设置字体与2、中计算高度时候的字体一致;
2、tableView:heightForRowAtIndexPath:在开始的时候把所有的cell高度全部算一遍,之后不再调用;
tableView:cellForRowAtIndexPath:每次cell进入屏幕的时候就会调用
[tableView reloaddata] 刷新数据,即重新访问数据源,向代理和数据源发消息(即调用代理方法tableView:heightForRowAtIndexPath:和数据源方法tableView:cellForRowAtIndexPath:,tableView:numberOfRowsInSection:)
调用顺序:tableView:numberOfRowsInSection:返回行数
tableView:heightForRowAtIndexPath:计算每行高度
tableView:cellForRowAtIndexPath:
整个过程顺序见下图
View controller Model