Pull to refresh

Comments 19

Будь зайкой, почикай обе картинки с полосатой пустотой на всю высоту экрана, пока тебя не покарали те, у кого каралка большая.)
UFO just landed and posted this here
UFO just landed and posted this here
Калькуляция высоты ячейки в динамической таблице UITableView

Чего мелочиться, пишите сразу «Калькуляция хайта селла в динамик тэйбле UITableView».
UFO just landed and posted this here
Странно, что на поиск решения у вас ушла неделя. Как по мне, так оно «гуглица» за несколько минут.
Касаемо кода:
UIFont* font = [UIFont systemFontOfSize:17.f];
Это серьезно? А если шрифт у Label в Story Board окажется другого размера или вообще другим? Про магическое число 320 вообще молчу.

И на последок, хотелось бы заметить, что это частный случай, когда ячейка состоит только из одного текстового поля. Для более сложных ячеек такой способ не подходит.
Статья по-большей части даже вредная. Как минимум, надо указать, что так никто не делает с тех пока, как появился autolayout.
В iOS 6-7 задают constraints и высчитывают высоту contentView методом -systemLayoutSizeFittingSize.
В iOS 7 появился доп. метод делегата таблицы -estimatedHeightForRowAtIndexPath, для приблизительного указания высоты.
Ну и счастливчики, разрабатывающие под iOS8+ могу использовать динамический подсчет величины просто указав

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = EstimatedRowHeight;


Хотя это не избавляет от проблем с многострочными UILabel. В довесок Apple не исправила баг с скачущими высотами ячеек при прокрутке вверх (тык).
Статья — хлам. Уже давно считают высоту ячейки через AutoLayout.
На сколько я знаю, через autolayout — считает очень медленно при сколь-нибудь сложном устройстве ячеек.

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

Ведь для этого ячейка должна быть создана, а высоту нужно передать до создания ячейки…
При правильной настройки constraints и выставлении
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = EstimatedRowHeight;

TableView сам рассчитает размер ячейки, достаточный для ее отображения.
Оно долго считает, если ячейки сложные. Так или иначе, приходится в ручную считать.
Что значит вручную? Без использования constraints?
Можно кэшировать уже рассчитанные высоты и в -estimatedHeightForRowAtIndexPath их возвращать.
Да, без использования констраинтов для расчета. Получается в разы быстрей.
На счет скорости вполне возможно, но хотелось бы увидеть приблизительный лэйаут на котором может сильно тормозить расчет высот.
Но как быть с ориентацией, и случаями, когда от размера зависит положение и размер элементов? Констреинты очень сильно в таких случаях помогают.
Пример, когда это необходимо: гипотетическое новостное приложением; скажем новости делятся на 4-5 видов и в них используется UITextView (не фиксированной высоты) + до 20 различных view. Соотвественно высота ячейки зависит от высоты TextView (может еще быть несколько Label-ов не фиксированной высоты и ширины). Тогда будет тормозить, знаю на своем опыте.

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

Да, когда поменяется ориентация — вам придется заново все пересчитывать и если лэйауты отличаются, то возни будет достаточно. Никто и не обещал, что будет легко:)
4-5 новостей — это 4-5 ячеек с различной разметкой и reuseIdentifier.
20 вью — это в одной ячейке заголовка новости? Если так — то очевидны проблемы с интерфейсом.
Я сам сейчас делаю приложение с выводом множества ячеек с 3-5 label различной высоты. Использую Masonry и авторасчет высот. За раз показывается около 40-60 ячеек. Не тормозит даже на iPhone 5, на 4s — слегка.
А не подскажете гугл запрос, где можно посмотреть примеры 3-5 лейблов в ячейке.
Сколько не пробовал — не попадается более-менее подробного гайда.

Сам пользуюсь Masonry, но ячейки продолжают плясать через раз.

ЗЫ. аналогично хотелось бы посмотреть по поводу Section Header с автолайоутом.

ЗЗЫ. таргет сборки иос 7+
Sign up to leave a comment.

Articles