Почему systemLayoutSizeFittingSize возвращает (0, 0) для UITableViewCell?

Вот фрагмент кода

    self.xyzIcon = [UIImage mobileImageNamed:@"icon_xyz"];
    self.xyzIconImageView = [UIImageView new];
    [self.contentView addSubview:self.xyzIconImageView];

    [self.xyzIconImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(weakSelf.contentView.mas_left);
        make.width.equalTo(@(weakSelf.xyzIcon.size.width));
        make.height.equalTo(@(weakSelf.xyzIcon.size.height));
    }];

В контроллере представления, который использует tableview

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (!self.prototypeCell) {
        self.prototypeCell = [UITableViewCell new];
    }

    [self.prototypeCell configure];

    CGFloat heightCalculated = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1.f;

    NSLog(@"Height calculated %f", heightCalculated);

    returns heightCalculated; 
}

Это всегда возвращает 1.f. Пожалуйста, помогите, и я не уверен, что я делаю неправильно здесь.

Ответ 1

Проблема заключается в том, что ваши ограничения не определяют высоту ячейки. Вы не привязали верх изображения или снизу изображения к его супервизу (contentView). Таким образом, ячейка не имеет ничего внутреннего, чтобы она не сворачивалась до нуля, как только вы вызывали systemLayoutSizeFittingSize.

Другими словами: способ systemLayoutSizeFittingSize работает, рассматривая что-то внутреннее ограничение как стойки, которые придают ему минимальный (или максимальный) размер. У вас нет стойки.