您的位置:首页 > 移动开发 > IOS开发

iOS开发之Masonry(五)

2016-01-22 13:58 429 查看
本文主要介绍利用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,我现在也在搜集资料,想明白。

不过放心,该项目中已经没有这个问题了,具体的解决办法等我弄明白了原因在介绍吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: