UITableViewCell 高度计算方法

UITableViewCell 或 headView 高度计算

在日常开发中,经常遇见设置cell 或是 SectionHeadView 或 headView高度问题

一般我们大概分两种方法设置其高度

  1. 高度固定,直接写死高度值。 这个最简单,不说了。
  2. 在拿到数据Model之后,通过Model值计算出View的高度,缓存在Model里,这样也可以减少计算高度方法调用,提高点性能。
    但是这种办法也有点局限性,当视图的高度,不能单纯根据Model就可以确定的时候,这个方法就不生效了。
  3. 类比UITableView-FDTemplateLayoutCell, 计算view高度

使用场景: View高度在view布局完成之后才能确定,或是view高度计算比较复杂的情况

使用方法
  1. 将视图对应的Model传过去,重新进行初始化,然后赋值,在返回一个假的视图size。
//用类方法将model传过去
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    CGFloat height = [SOAReviewsHeaderView headViewHeightWithModel:self.reviewsModel];
    return self.reviewsModel.reviewList > 0 ? height : 0;
}

+ (CGFloat)headViewHeightWithModel:(SOAGoodsDetailReviewsModel *)model {
    SOAReviewsHeaderView *headView = [[SOAReviewsHeaderView alloc] initWithReuseIdentifier:nil];
    headView.model = model;  //必须赋值,这样它才会走其真正赋值方法,计算其准确高度
    return [headView sizeThatFits:CGSizeMake(SCREEN_WIDTH, CGFLOAT_MAX)].height; //随便写一个假的size即可
}
  1. 重写 - (CGSize)sizeThatFits:(CGSize)size方法,得到视图真的size。
/*!
 *  @brief 这里计算高度,可以根据视图的布局得出,直接取下面子视图的frame即可
 */

// 重写 sizeThatFits:方法,得到真正View的size
- (CGSize)sizeThatFits:(CGSize)size {
    CGFloat height = 15.0f; //顶部距离
    height += self.infoLabel.intrinsicContentSize.height;
    height += 15; //间距
    height += self.showResultInsteadLabel.intrinsicContentSize.height;
    height += 20;  //间距
    height += self.lineCount * 40;
    height += 10; //底部间距
    return CGSizeMake(SCREEN_WIDTH, height);
}

以上就会自动算出view的高度了,很方便,不管视图多么复杂。

别用这个方法算较多cell高度了,卡的一逼。。擦。。。

xcode 小tips

xcode 模拟器和Mac 粘贴板内容不同步问题。
打开模拟器,选择Edit --> Auto Sync Pasteboard 即可实现Mac 和 模拟器粘贴板内容一致。
在Mac上复制的内容,可以直接粘贴到模拟器上。


同步Mac粘贴板到模拟器.png

PS: xcode LLVM clang 常用调试方法.
这个文章参考看看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,012评论 3 119
  • 今天根据老师讲的对公众号关键词回复做了设置 第一次设置不熟悉还是慢了点 其次公众号转载了一篇文章 现在主要是文章比...
    随缘_1ebb阅读 248评论 0 0
  • 人工智能分析气候变化的“声音” 北极部分地区的春天来得更早,一些候鸟也来得更早。但是研究人员还没有弄清楚气候变化是...
    wumingzhi111阅读 545评论 0 3
  • 今日凌晨,备受期待的德国队0:2负于东道主法国队,你押队赢家了没?热爱德意志战车的朋友们憋失望,调整好心情,看魔线...
    魔线科技阅读 232评论 0 1
  • 一七说:(20180111) 一、人类文明已经从“身份社会”进化到了“契约社会”,而在区块链有望带领人类从契约社会...
    秦淮书生阅读 159评论 0 0