以编程方式修改从故事板初始化的自定义UITableViewCell

时间:2013-09-22 20:14:16

标签: ios objective-c uitableview autolayout

我在故事板中设计了一个带有2个动态内容的自定义单元格:

  • 带有文本的UILabel,可以占用1到n行 - 可变size.height
  • 应相应定位的UIImageView - variable 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

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

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

0 个答案:

没有答案