Я пытаюсь рассчитать динамическую высоту ячейки в моем UITableView.Динамическая высота UITableViewCell для сложных ячеек
Мои ячейки очень сложны: это может быть дюжина ярлыков, uitextfield, кнопок и т. Д. На самом деле это как форма в ячейке (с UITableViewGroupedStyle, она действительно выглядит как форма!). Так что мне неважно, «sizeWithFont: withConstrainedSize: etc ...»
У меня есть собственный метод класса в моей ячейке, который вычисляет высоту ячейки (от высоты компонентов внутри).
Теперь в моем UITableViewController я хочу установить правильную высоту для своих ячеек. Для этого мне нужно позвонить getHeight в мою камеру. Но ... Если я назову «cellForRowAtIndexPath» в моей «heightForRowAtIndexPath», он будет цитировать (потому что cellForRow ... требуется heightForRow .... для создания ячейки).
Я также попытался построить ячейку в моей ячейкеForRowAtIndexPath, получить ее высоту и сохранить ее в массиве, чтобы получить ее в heigtForRowAtIndexPath. Поскольку «heightForRowAtIndexPath» называется BEFORE «cellForRow ...», первый раз я возвращаю значение по умолчанию (CGFLOAT_MAX). Когда моя ячейка построена, я возвращаю ее высоту из моего массива. Но, чтобы позвонить ему во второй раз, мне нужно вызвать его вручную, поэтому, когда моя ячейка встроена в «CellForRow ...», я вызываю reloadData. Но ... (снова и снова) это все равно не работает ... На самом деле, иногда это работает (с UITableViewGroupedStyle), а иногда нет (withUITableViewPlainStyle, beacause это dosent, как значение по умолчанию CGFLOAT_MAX ...)
Это делает меня сумасшедшим!
Эта версия работает для UITableViewGroupedStyle:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MFFormListCell *cell = [self.cellSizeMap objectForKey:indexPath];
return cell;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
MFFormListCell *cell = [self.cellSizeMap objectForKey:indexPath];
if(!cell || ![cell isEqual:[NSNull null]]) {
[self.cellSizeMap setObject:[NSNull null] forKey:indexPath];
cell = [tableView dequeueReusableCellWithIdentifier:@"FormListCell" forIndexPath:indexPath];
[self.cellSizeMap setObject:cell forKey:indexPath];
}
if([cell isEqual:[NSNull null]])
return CGFLOAT_MAX; //Valeur max pour que le système prennent en compte toutes les cellules à afficher
else
return [[cell getHeight] floatValue];
}
Не спрашивайте о первом «если» в «heightForRowAtIndexPath:», это плохой трюк, чтобы избежать петли.
показать ваш метод cellforrowatindexpath. Я хочу видеть ваш код .. –
Я меняю его на много времени, поэтому его нет стабильной версии прямо сейчас. – QLag