iOS开发之Masonry(五)
2016-01-22 13:58
429 查看
本文主要介绍利用Masonry布局tableView,并自适应cell高度。核心代码如下:
在计算cell高度的时候,设置下面属性会节省系统计算cell的高度的消耗。
在写这个项目的时候,发现一个问题,就是cell在iPhone6上运行时,cell的宽度是320,问不是375,我现在也在搜集资料,想明白。
不过放心,该项目中已经没有这个问题了,具体的解决办法等我弄明白了原因在介绍吧。
+ (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,我现在也在搜集资料,想明白。
不过放心,该项目中已经没有这个问题了,具体的解决办法等我弄明白了原因在介绍吧。
相关文章推荐
- XMPP扩展协议详解
- iOS中类似QQ圆形头像 处理
- iOS开发-原生二维码的扫描和生成
- iOS关于菜单滚动视图实现
- iOS开发-原生二维码的扫描和生成
- iOS版上传数据到阿里后台(AliyunOSSiOS)
- IOS开发知识(六)
- iOS项目开发实例
- IOS开发知识(五)
- IOS开发知识(四)
- iOS就业项目
- iOS - 固定宽度和字号,获取Label的frame;固定高度和字号,获取Label的frame
- IOS开发知识(三)
- IOS开发知识(二)
- IOS开发知识(一)
- iOS的集中collection布局
- iOS数字时间与时间的相互转换
- ios 键盘遮挡,监听键盘调整view的frame
- iOS 集成支付宝支付编译出现的问题及解决办法
- iOS 9之应用内搜索(CoreSpotlight)API