Как было отмечено в комментариях, вы не можете назвать cellForRowAtIndexPath
внутри heightForRowAtIndexPath
.
Что вы можете сделать, это создать ячейку шаблона, используемую для заполнения вашими данными, а затем вычислить ее высоту. Эта ячейка не участвует в рендеринге таблицы, и ее можно использовать повторно для вычисления высоты каждой ячейки таблицы.
Вкратце, он состоит из конфигурирования ячейки шаблона с данными, которые вы хотите отобразить, изменить размер изображения в соответствии с содержимым, а затем прочитать его высоту.
Я принял этот код из проекта я работаю - к сожалению, это в Objective C, я не думаю, что вы будете иметь проблемы перевода с быстрой
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static PostCommentCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.tblComments dequeueReusableCellWithIdentifier:POST_COMMENT_CELL_IDENTIFIER];
});
sizingCell.comment = self.comments[indexPath.row];
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;
}
возможно дубликат [ EXC \ _BAD \ _ACCESS в heightForRowAtIndexPath iOS] (http://stackoverflow.com/questions/12652761/exc-bad-access-in-heightforrowatindexpath-ios) –
Вы не должны вызывать 'cellForRowAtIndexPath' из' heightForRowAtIndexPath'. EXC_BAD_ACCESS вызван переполнением стека, вызванным глубокой рекурсией. –
где мне позвонить CellForRowAtIndexPath? –