阅读 41

UITableView cell 或 headView 高度计算问题

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的高度了,很方便,不管视图多么复杂。

xcode 小tips

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

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

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

关注下面的标签,发现更多相似文章
评论