Как я могу сделать переменные ячейки таблицы высоты на iPhone правильно?

Посмотрите команда lsof (список открытые файлы) - это может сказать Вам, которых процессы содержат что открытый. Иногда это хитро, но часто что-то столь же простое как sudo lsof | grep (your device name here) могло сделать это для Вас.

22
задан Jasarien 18 September 2009 в 09:04
поделиться

2 ответа

Вот что я использую. В NSString есть метод, который сообщит вам размеры текстового поля на основе информации о шрифте и заданных вами ограничений по высоте / ширине.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *text = [self getTextForIndexPath:indexPath];
    UIFont *font = [UIFont systemFontOfSize:14];
    CGSize size = [self getSizeOfText:text withFont:font];

    return (size.height + 11); // I put some padding on it.
}

Затем вы пишете метод вытягивания текста для этой ячейки ...

- (NSString *)getTextForIndexPath:(NSIndexPath *)indexPath
{
    NSString *sectionHeader = [self.tableSections objectAtIndex:[indexPath section]];
    NSString *sectionContent = [self.tableData objectForKey:sectionHeader];

    return sectionContent;
}

И это для получения размера текста.

- (CGSize)getSizeOfText:(NSString *)text withFont:(UIFont *)font
{
    return [text sizeWithFont:font constrainedToSize:CGSizeMake(280, 500)];
}
38
ответ дан 29 November 2019 в 04:47
поделиться

Подумайте:

  • Что, если бы у вас было, скажем, шесть разных типов ячеек, каждая со своим идентификатором и фиксированной высотой. Один будет для ячейки с одной строкой, другой для ячейки с двумя строками и т. Д.

  • Каждый раз, когда ваша модель изменяется, вычисляйте высоту для этой строки, а затем найдите ближайший тип ячейки, высота которой наиболее близка к тебе нужно. Сохраните этот идентификатор типа ячейки вместе с моделью. Вы также можете сохранить фиксированную высоту строки для этой ячейки в модели, чтобы вы могли вернуть ее в вызове tableview: heightForRowAtIndexPath (я бы не стал слишком зацикливаться на том, чтобы заставить его вычислять внутри самого класса ячейки - технически это не часть функции рисования ячеек и многое другое, что используется табличным представлением, чтобы решить, какой тип ячейки создавать).

  • Во время выполнения, когда вас просят вернуть ячейку для этой строки, все, что вам нужно сделать, это создать (или получить из кеша ячеек) ячейку с идентификатором типа ячейки, загрузить значения, и все готово.

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

2
ответ дан 29 November 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: