Как установить динамическую высоту ячейки в iPhone?

В своих приложениях я создал табличное представление и отобразил изображения и метки в табличном представлении. Я загрузил изображение и установил высоту изображения в другой класс, и я передал значение высоты изображения с помощью делегатов. В моей проблеме метод heightForRowAtIndexPath вызывается очень раньше и больше никогда не вызывается. Итак, как установить высоту ячейки в зависимости от высоты изображения?

//appDelegate.imageHeight - значение делегата высоты изображения.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

 NSLog(the height of the image is --------------------------%f, appDelegate.imageHeight);
 In Console:
     the height of the image is --------------------------0.000000
     the height of the image is --------------------------0.000000
     the height of the image is --------------------------0.000000
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     NSLog(the height of the image is --------------------------%f, appDelegate.imageHeight);
     In Console:

        the height of the image is --------------------------98.567039
        the height of the image is --------------------------300.000000
        the height of the image is --------------------------232.288406
 }

Можно ли вызвать метод heightforRowAtIndexPath внутри метода cellForRowAt. Поскольку я установил размер и высоту кадра ячейки, зависит от высоты изображения. Итак, как я могу установить высоту ячейки в зависимости от высоты изображения? Пожалуйста, посоветуйте мне.

Спасибо!


person Pugalmuni    schedule 07.01.2011    source источник
comment
Я пытаюсь добавить похожее поведение к приложению; нашел этот пост, у которого может быть решение? - ответ говорящий call [tableView beginUpdates]; а [tableView endUpdates] выглядит многообещающим? : stackoverflow.com/questions/460014/   -  person petert    schedule 07.01.2011


Ответы (2)


Метод heightForRowAtIndexPath вызывается перед cellForRowAtIndexPath, поэтому вам нужно знать высоту изображений, которые вы показываете в своих ячейках. Поддерживайте словарь или массив, содержащий высоту изображений, которые передаются этому классу, и используйте его для соответствующей установки высоты ячейки

person Javal Nanda    schedule 07.01.2011
comment
Спасибо за ответ. Но значения высоты изображения получают только в методе cellForRowAtIndexPath. Если я создаю какой-либо словарь или массив, как я могу передать эти значения в метод heightForRowAtIndexPath? так можно ли вызвать heightForRowAtIndexPath внутри метода cellForRowAtIndex или какие-то другие решения? Спасибо. - person Pugalmuni; 07.01.2011
comment
как это возможно, что все, что вы делаете для вычисления высоты изображения в cellForRowAtIndex, не может быть выполнено в то время, когда появляется ваше представление? Скажите, как вы получаете свои изображения? через парсинг что ли? а что на самом деле вы делаете в пути cellForRowAtIndex? - person Javal Nanda; 07.01.2011
comment
Да, Нанда, я использовал библиотеку Async для импровизации ленивой загрузки. Значения высоты изображения передаются другому классу, так что значения высоты изображения получают только прокрутки ячеек табличного представления, т.е. метод cellForRowAtIndex. Спасибо! - person Pugalmuni; 07.01.2011

вот несколько предложений UITableView гибкий / динамический heightForRowAtIndexPath

person Sorin Antohi    schedule 07.01.2011