iOS开发之Masonry(五)

本文主要介绍利用Masonry布局tableView,并自适应cell高度。核心代码如下:

+ (CGFloat)cellHeightWithModel:(HXTestModel *)model {
    
    HXTestCell *cell = [[HXTestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
    cell.model = model;
    [cell layoutIfNeeded];
    
    CGRect frame =  cell.descLabel.frame;
    
    return CGRectGetMaxY(frame);
}
给cell提供一个这个静态方法,该方法是通过模型计算cell的高度,在返回cell高度的代理方法中调用该方法,并传入模型,如下:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    HXTestModel *model = self.datas[indexPath.row];
    
    return [HXTestCell cellHeightWithModel:model];
}
当系统要返回cell的高度的时候,就会重新设置cell子控件的约束,再通过[cell layoutIfNeeded]方法重新布局,得到cell最后一个控件的最大Y值。

在计算cell高度的时候,设置下面属性会节省系统计算cell的高度的消耗。

    // 设置该属性后,heightForRow:和cellForRow:方法交替执行,还可以减轻cell高度的计算量
    tableView.estimatedRowHeight = 100.0;
或者实现代理方法:

/**
 *  实现该方法后,heightForRow和cellForRow方法交替执行,还可以减轻cell高度的计算量
 */
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    
    return 100.0;
}
注意:该属性或方法设置的数值不能太离谱,要尽量接近cell的真实高度。

在写这个项目的时候,发现一个问题,就是cell在iPhone6上运行时,cell的宽度是320,问不是375,我现在也在搜集资料,想明白。

不过放心,该项目中已经没有这个问题了,具体的解决办法等我弄明白了原因在介绍吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值