UITableViewCell 高度计算方法

作者: Eddiegooo | 来源:发表于2018-08-18 10:24 被阅读0次

    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 常用调试方法.
    这个文章参考看看

    相关文章

      网友评论

      本文标题:UITableViewCell 高度计算方法

      本文链接:https://www.haomeiwen.com/subject/bekpbftx.html