Я работаю над приложением, которое отображает сообщения, содержащие текст разной длины. Когда я получаю данные через запрос сервера, я применяю форматирование к NSAttributedString, вычисляю высоту текста для определенной ширины, а затем сохраняю это значение, когда tableView вызовет heightForRowAtIndexPath:
позже.
Для каждого нового поста я вызываю этот метод:
- (CGFloat)calculateTextViewHeight:(NSString *)string
{
NSAttributedString *bodyText = [self formatString:string];
UITextView *tempTextField = [[UITextView alloc] init];
tempTextField.attributedText = bodyText;
return [tempTextField sizeThatFits:CGSizeMake(cellWidth, FLT_MAX)].height;
}
Это прекрасно работает. Однако, когда я перебираю от 50 до 200 сообщений за раз, tableView зависает. Насколько я понимаю, sizeThatFits:
это метод UIKit и поэтому должен выполняться в основном потоке.
Есть ли способ вычислить высоту NSAttributedString без зависания основного потока. Или, может быть, есть способ запустить sizeThatFits:
в фоновом потоке?