0

我在情节提要中设计了一个自定义单元格,其中包含 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

尽管如此,尽管所有值都是正确的,但单元格并未按照应有的方式绘制。这意味着当单元格较大时,图像在单元格内部太高,而当单元格较小时,图像会被下面的单元格隐藏。

我究竟做错了什么 ?自动布局可以与此有关吗?

4

0 回答 0