Я пытаюсь получить ячейки таблицы переменной высоты реализованы и то, что я думал, что было бы элегантное решение оказалось в переполнение рекурсии/стек:Как получить таблицу целевой ячейки внутри tableView: heightForRowAtIndexPath :?
- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCustomCell *cell = (MyCustomCell *)[aTableView cellForRowAtIndexPath:indexPath];
return [cell heightForObject:...]; // passing data object on indexPath
}
Все метки ячейки таблицы и другие просматривать свойства инициализируются при создании (обычным способом tableView:cellForRowAtIndexPath:
). Таким образом, моя идея состояла в том, что я мог бы переместить вычисления, специфичные для высоты, из контроллера таблицы для моей пользовательской реализации ячейки, как это. Я мог бы использовать одну и ту же ячейку в других контроллерах таблиц без малейшего дублирования кода. heightForObject:
может посмотреть на его подвид, какие шрифты они используют и построить значение этой высоты. Черт, я мог бы даже изменить размер шрифта для определенных ярлыков ячеек, и они должны теоретически правильно обновить их высоту.
Как уже упоминалось, я ударил эту проблему с переполнением стека с помощью этого кода. Как я могу получить эту целевую ячейку, для которой вызывается tableView:heightForRowAtIndexPath:
?
Я просто подумал, что это может быть результатом того, как UITableView удается это клетка. Как если бы вы прокручивались вглубь вниз в таблицу, он будет освобождать предыдущие объекты ячейки, и когда вы снова прокрутите список, они будут повторно создаваться с помощью 'tableView: cellForRowAtIndexPath:'. Таким образом, это может означать, что он запрашивает высоту ячейки, даже если эта ячейка в настоящее время еще не выделена/не инициализирована (например, если вы находитесь внизу в таблице). Я хочу, чтобы был способ чтения фактических свойств/конфигурации ячейки при вычислении высоты. – Sim
Проблема в том, как вы диагностируете; по существу, таблица хочет иметь возможность отображать ячейку 8000 без необходимости хранить ячейки 0-7999 в памяти и знать, насколько она находится вниз по списку. Это не плохой дизайн API, это особенно необходимо для ограничений. Если у вас есть, скажем, восемь типов ячеек, вы можете загружать NIB один раз во время init, где-то хранить высоты, а затем использовать любую логику, которую вы используете, для определения типа ячейки из индекса, чтобы получить соответствующее значение для tableView: heightForRowAtIndexPath :. – Tommy