Расчет UITableViewCell Height и делегирование?

Я знаю, что этот вопрос задавали сотни раз раньше, но он никогда не был решен (или, по крайней мере, так, как мне хотелось бы). У меня довольно сложная настройка UITableViewCell. cell.backgroundView загружается из подкласса UIView, который использует справедливый бит CoreGraphics и CoreText. Код изобилует кодом CTFramesetterSuggestFrameSizeWithConstraints , поэтому я могу использовать дубликат класса в методе heightForRowAtIndexPath .

Я думаю, что я могу решить это, создав NSMutableDictionary с индексом в качестве ключа и высотой в качестве значения. Но тогда я столкнулся с проблемой вызова heightForRowAtIndexPath . Я считаю, что я могу решить эту проблему, угадывая высоту ячейки, а затем, когда подкласс UIView ячейки завершил рендеринг, используйте делегирование, чтобы установить высоту ячейки.

Но это оставляет мне проблему, как, черт возьми, я делегирую это? И, как я могу предотвратить прокрутку от крайне изменчивости? поскольку ячейки будут созданы и изменены в течение секунды.

0
nl ja de

1 ответы

Раньше я использовал фиктивную ячейку. У меня есть отдельный метод -fillInCell: forRowAtIndexPath: , который помещает данные в ячейку. Таким образом, я могу заполнить фиктивную ячейку в -tableView: heightForRowAtIndexPath: и реальную ячейку в -tableView: cellForRowAtIndexPath: .

Если это не работает для вас, есть другие варианты.

Первое, что приходит на ум, - создать реальные ячейки в -tableView: heightForRowAtIndexPath: вместо -tableView: cellForRowAtIndexPath: . Вы можете хранить завершенные ячейки в изменяемом словаре. -tableView: cellForRowAtIndexPath: просто вытащит завершенную ячейку из словаря. Вы также должны обнаружить, когда прокрутка остановлена, поэтому вы можете очистить словарь (только потому, что был вызван -tableView: heightForRowAtIndexPath: не означает -tableView: cellForRowAtIndexPath: получит вызов для той же indexPath).

Надеюсь, это поможет.

1
добавлено
@ RolloMontgomeryKonig-Brock Зачем вам нужен вызов -drawRect: ? Все размеры просмотров должны быть исправлены до вызова -drawRect: .
добавлено автор Jeffery Thomas, источник
Маленькая проблема, прямой прямоугольник в пользовательской ячейке UIView не будет вызван вторым способом, которым вы посоветовали мне это сделать. Как я могу это назвать?
добавлено автор Rollo Montgomery Konig-Brock, источник
Потому что код чертежа зависит от draw rect. Мне нужно рисовать прямоугольник, чтобы иметь возможность рисовать содержимое ячейки. Важным является только размер, который является постоянным.
добавлено автор Rollo Montgomery Konig-Brock, источник
Мне нужно вызвать drawRect, чтобы получить высоту ячейки.
добавлено автор Rollo Montgomery Konig-Brock, источник
Ничего, подумал.
добавлено автор Rollo Montgomery Konig-Brock, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.