Комментарии 10
Спасибо, очень интересно. Выглядит и работает очень круто, жаль что вас небыло год назад :)
К сожалению, Эппловская документация грозится полной блокировкой работы с UIKit из фонового потока — со следующей мажорной версии iOS попытка обратиться к интерфейсу из фонового потока будет кидать исключение.
Так же, используя autolayout, вы можете кешировать размер ячеек без предварительного расчёта совсем: в методе cellWillDisplay: размеры ячеек уже рассчитаны и вы можете получить актуальный frame ячейки.
Так же, используя autolayout, вы можете кешировать размер ячеек без предварительного расчёта совсем: в методе cellWillDisplay: размеры ячеек уже рассчитаны и вы можете получить актуальный frame ячейки.
Но вот основной проблемой остаётся прокрутка в середину таблицы — эта операция требует полного пересчёта всех промежуточных ячеек, либо кучи магии с перепозиционированием.
Мы не используем UIKit в фоновом потоке. Для расчета размеров текста используется функция NSString.boundingRectWithSize(_:options:attributes:context)
Как вы решили неточность расчёта размера текста?
Если ничего не изменилось за 2 мажорные версии iOS — boundingRectWithSize и, собственно, UITextView используют разные движки рендера текста. И результирующие размеры не совпадают.
Собственно, типичная ситуация: на 100 строк текста шрифтом Helvetica Neue boundingRectWithSize: даёт ошибку больше, чем высота двух строк.
Если ничего не изменилось за 2 мажорные версии iOS — boundingRectWithSize и, собственно, UITextView используют разные движки рендера текста. И результирующие размеры не совпадают.
Собственно, типичная ситуация: на 100 строк текста шрифтом Helvetica Neue boundingRectWithSize: даёт ошибку больше, чем высота двух строк.
В статье описано как это сделано:
textView.textContainerInset = UIEdgeInsetsZero
textView.textContainer.lineFragmentPadding = 0
Спасибо за Chatto всем его авторам! Спасибо, что выложили в open source! Вещь очень классная. Я погонял ChattoApp под хорошей нагрузкой. Отлично справляется. Другие, известные мне, движки далеко позади.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
История создания Chatto