Рассчитать пользовательскую высоту ячейки с несколькими представлениями iphone - PullRequest
0 голосов
/ 12 июля 2010

Я хочу рассчитать свою собственную высоту ячейки с несколькими подпредставлениями, такими как метки, изображения, кнопки и т. Д.

Как рассчитать размер ячейки?

Кажется, делать это не рекомендуетсяв cellForRowAtIndxPath, также принимая экземпляр Cell в heightForRowAtIndexPath, он идет в бесконечном цикле.

Я могу вычислить высоту для ячейки в пользовательском классе ячеек, но я не уверен, куда мне ее возвращать.

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

Любая помощь приветствуется.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

В идеале вы должны иметь возможность рассчитать высоту ячейки, не создавая для нее ячейку.tableView:heightForRowAtIndexPath: будет вызываться для каждой ячейки в вашей таблице (не только для ячеек на экране), и если вам потребуется создать полный объект ячейки в этом методе, это, вероятно, сильно повлияет на производительность.необходимо получить тип ячейки на основе аргумента indexPath, так же, как вы делаете это в tableView:cellForRowAtIndexPath:

0 голосов
/ 13 июля 2010

Вот как я это сделал:

Я создал массив категорий ячеек в порядке их появления в табличном виде с именем category_type, а затем проверил типы категорий и вычислил высоту текста.на основе элементов управления, чтобы рассчитать всю высоту ячейки.

NSString *category = [NSString stringWithFormat:[category_type objectAtIndex:indexPath.row]];

if([category isEqualToString:@"xyz"])
{
    xyzInstance = [arrayWithObjectsToLoad objectAtIndex:indexPath.row];


    float textHeight = [MLUtils calculateHeightOfTextFromWidth:editorialInstance.eletitle : [UIFont fontWithName:@"Helvetica" size:13.0] :320 :UILineBreakModeWordWrap];  //Dyanamic label height

    totalHt = 171 - 21 + textHeight + 20;     // My calculation for text part of label
    return totalHt;

}

Я сделал это для всех категорий.

0 голосов
/ 12 июля 2010

Вы всегда можете загрузить свои ячейки в viewWillAppear или viewDidLoad, а затем добавить их в NSArray.Затем в tableView:heightForRowAtIndexPath:, используя предоставленную indexPath, верните высоту соответствующей ячейки в вашем массиве.Затем в tableView:cellForRowAtIndexPath, опять же, используя предоставленную indexPath, верните соответствующую ячейку в вашем массиве.

ОБРАТИТЕ ВНИМАНИЕ:
Если у вас много ячеек, это может привести к тому, что ваш пользовательский интерфейсзапереть, пока он загружает клетки.Чтобы избежать этого, вы можете создать собственный метод для заполнения массива и выполнить его в фоновом потоке.Кроме того, если это займет слишком много времени, tableView не отобразит все ваши ячейки, так как ваш массив не будет заполнен полностью.Это означает, что вы должны вызывать [tableView reloadData]; после заполнения массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...