UITableViewCell根据内容显示不同的高度问题

1.iOS8及以后,通过XIb自定义不等高cell: 

// 告诉tableView所有cell的真实高度是自动计算(根据设置的约束来计算)self.tableView.rowHeight = UITableViewAutomaticDimension;

// 告诉tableView所有cell的估算高度

self.tableView.estimatedRowHeight = 44;

注意一点的是在Xib中设置自动换行Lable的时候要设置lable和cell底部的约束如图:


运行效果如下:


2.(估计现在都没人用了简单介绍一下)如果要支持iOS7及之前如果cell内部有自动换行的label,需要设置preferredMaxLayoutWidth属性

1.如果cell内部有自动换行的label,需要设置preferredMaxLayoutWidth属性

- (void)awakeFromNib

{// 手动设置文字的最大宽度(为了让label知道自己文字的最大宽度,进而能够计算出自己的frame)

self.titleLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;

}

2.还要在tableView的设置cell估算高度

// 告诉tableView所有cell的估算高度(设置了估算高度,就可以减少tableView:heightForRowAtIndexPath:方法的调用次数)

self.tableView.estimatedRowHeight = 80;

3.在代理方法中计算cell的高度

DemoCell *cell;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 创建一个临时的cell(cell的作用:根据模型数据布局所有的子控件,进而计算出cell的高度)

if (!cell) {

cell = [tableView dequeueReusableCellWithIdentifier:ID];

}

// 设置模型数据

...

return cell.height;

}

// heightForRowAtIndexPath中调用的返回cell高度的方法

- (CGFloat)height

{

// 强制布局cell内部的所有子控件(label根据文字多少计算出自己最真实的尺寸)

[self layoutIfNeeded];

// 计算cell的高度

if (...) {

return ...;

} else {

return ...;

}

}

3.通用规则代码设置

设置思路如下:


所有涉及基于纯代码原则

1.建立Modle模型

2.根据Modle模型建立framModle模型并计算出控件的Fram

3.在cell中设置子控件并设置Fram

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

//设置子控件

[self setupchildrenView];

}

return self;

}


- (void)setFramModle:(myFootPrintFramModle *)framModle{

_framModle=framModle;

myFootPrintDataModle *dataModle=framModle.modle;

//设置控件的Fram和数据

}

4.在代理方法设置返回的行高

- (CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

myFootPrintDataSectionModle *Modle=self.dataArray[indexPath.section];

myFootPrintFramModle *framMod=Modle.dataArray[indexPath.row];

return framMod.cellHeight;

}

简述一下方法一和方法三的优缺点:

方法一:对于一些比较简单的界面,如上图,Xib拖控件两句话就可以搞定很方便。缺点就是比如下面的界面就不好控制了:


实现根据数据的不同,排列图片,以及对下面转发,评论,点赞工具条的设计,这个很明显把图片和工具条单独的功能繁多我们需要分开来写,这样就需要代码进行实现了(这个只是本人的思路),具体根据开发遇到的问题决定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值