UITableViewCell 或 headView 高度计算
在日常开发中,经常遇见设置cell 或是 SectionHeadView 或 headView高度问题
一般我们大概分两种方法设置其高度
- 高度固定,直接写死高度值。 这个最简单,不说了。
- 在拿到数据Model之后,通过Model值计算出View的高度,缓存在Model里,这样也可以减少计算高度方法调用,提高点性能。
但是这种办法也有点局限性,当视图的高度,不能单纯根据Model就可以确定的时候,这个方法就不生效了。 - 类比UITableView-FDTemplateLayoutCell, 计算view高度
使用场景: View高度在view布局完成之后才能确定,或是view高度计算比较复杂的情况
使用方法
- 将视图对应的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即可
}
- 重写
- (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上复制的内容,可以直接粘贴到模拟器上。
PS: xcode LLVM clang 常用调试方法.
这个文章参考看看