我在情节提要中设计了一个自定义单元格,其中包含 2 个动态内容:
- 带有文本的 UILabel 可以占用 1 到 n 行 - 可变 size.height
- 应相应定位的 UIImageView - 变量 origin.y
返回单元格高度和调整 UILabel 没有问题,但我无法让 UIImageView 移动。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [CustomCell heightFor:self.tableContent[indexPath.row]];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CustomCell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
[cell initWith:self.tableContent[indexPath.row]];
NSLog(@"%f %f", cell.frame.size.height, cell.myImageView.frame.origin.y);
return cell;
}
NSLog 返回单元格的正确高度,以及 myImageView 的正确原点,但 imageView 保持原位。这是用于初始化单元格的方法(在 CustomCell.m 中定义)
- (void)initWith:(CustomModel *)model {
NSInteger newHeight = [CustomCell heightFor:model];
self.myImageView.frame = CGRectMake(self.myImageView.frame.origin.x,
self.myImageView.frame.origin.y + (newHeight - kCellBaseHeight),
self.myImageView.frame.size.width,
self.myImageView.frame.size.height);
}
总结一下:
- heightForRowAtIndexPath 根据每个单元格的内容返回正确的高度
- cellForRowAtIndexPath 正确初始化单元格,高度正确,单元格内的UIImageView为正确调整的origin.y
尽管如此,尽管所有值都是正确的,但单元格并未按照应有的方式绘制。这意味着当单元格较大时,图像在单元格内部太高,而当单元格较小时,图像会被下面的单元格隐藏。
我究竟做错了什么 ?自动布局可以与此有关吗?