day10-UITableView-自定不等高的cell-sto
2020-06-07 本文已影响0人
js_huh
自定不等高的cell-storyboard版 01-无配图
自定不等高的cell-storyboard版 02-有配图
是什么?
因cell的高度,在storyboard
的里面固定了.那么当不显示"配图"的情况下,cell的高度就显得太高了,不协调,该怎么办呢?
答: 第2种方法,直接修改cell的高度 frame 和 storyboard结合方式.
- 重写
cellHeight
的get方法
// 这是重点,一个巧妙的方式.- 强制刷新
- 更改cell的高度
-
heightForRowAtIndexPath
- 是
UITableViewDelegate
代理方法 - 设置cell的告诉.
- 是
- 需设置正文label控件的宽度,否则不会换行。
- (void)awakeFromNib
{
[super awakeFromNib];
//手动设置,lable的宽度,否则不会换行.
self.txtLbl.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
}
示例代码:
- (CGFloat)cellHeight{
//强制刷新
[self layoutIfNeeded];
//有配图时,cell高度=配图的Y + 间距10
if (self.statu.picture){
return CGRectGetMaxY(self.pictureImg.frame)+10;
}else{ //无配图时,cell高度 = 正文的Y + 10
return CGRectGetMaxY(self.txtLbl.frame)+10;
}
}
/*
heightForRowAtIndexPath -- 里面的cell是临时的cell
不会显示宽/高,那么需要手动设置最大宽度.
临时cell
(cell没有返回,也就是说没有创建出cell.)
作用:为了传递indexPath这一行对应的模型数据,
通过模型数据去布局所有的子控件,
得到所有子控件的frame,
进而计算cell的高度.
*/
StatusCell *cell;
//设置cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (cell == nil) {
cell = [tableView dequeueReusableCellWithIdentifier:ID];
}
cell.statu = self.statusData[indexPath.row];
return cell.cellHeight;
}