Посмотрите команда lsof (список открытые файлы) - это может сказать Вам, которых процессы содержат что открытый. Иногда это хитро, но часто что-то столь же простое как sudo lsof | grep (your device name here)
могло сделать это для Вас.
Вот что я использую. В 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)];
}
Подумайте:
Что, если бы у вас было, скажем, шесть разных типов ячеек, каждая со своим идентификатором и фиксированной высотой. Один будет для ячейки с одной строкой, другой для ячейки с двумя строками и т. Д.
Каждый раз, когда ваша модель изменяется, вычисляйте высоту для этой строки, а затем найдите ближайший тип ячейки, высота которой наиболее близка к тебе нужно. Сохраните этот идентификатор типа ячейки вместе с моделью. Вы также можете сохранить фиксированную высоту строки для этой ячейки в модели, чтобы вы могли вернуть ее в вызове tableview: heightForRowAtIndexPath (я бы не стал слишком зацикливаться на том, чтобы заставить его вычислять внутри самого класса ячейки - технически это не часть функции рисования ячеек и многое другое, что используется табличным представлением, чтобы решить, какой тип ячейки создавать).
Во время выполнения, когда вас просят вернуть ячейку для этой строки, все, что вам нужно сделать, это создать (или получить из кеша ячеек) ячейку с идентификатором типа ячейки, загрузить значения, и все готово.
Если расчет высоты ячейки слишком медленно, то вы можете использовать тот же трюк, что и кеш представления таблиц, и делать это только по запросу, когда ячейка появляется в поле зрения. В любой момент времени вам нужно будет сделать это только для видимых ячеек, а затем только для одной ячейки, поскольку она прокручивается в поле зрения с любого конца.