2016-04-04 4 views
5

Я пытаюсь создать сложный UITableViewCell через Autolayout, но при прокрутке он сильно отстает от производительности, поэтому я решил программно использовать для фрейма.ios UITableViewCell программно создает в drawRect vs layoutSubviews

Сложность компоновки ячеек подобна картам Facebook, где каждая ячейка отличается от w.r.t динамическим текстом и изображениями.

Я попытался отобразить ячейку в layoutSubviews, но прокрутка по-прежнему плохая, но лучше, чем автоспуск.

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

Может ли кто-нибудь вести меня, что лучше всего, я могу пойти с лучшими характеристиками прокрутки? Я застрял .

+0

fb cards? не могли бы вы уточнить? – faviomob

+0

означает fb news feed, где высота изображения изменяется, а также сообщение – Mukesh

+0

есть также комментарии, понравится счетчики и прочее. Я воспроизвел ячейку instagram с автозапуском с приемлемым исполнением (не настолько ошеломляющим, как оригинальное, хотя), таким образом, без конкретный образец трудно сказать, что может быть неправильно с вами решение. Я считаю, что fb и instagram не используют autolayout :) – faviomob

ответ

0

Я также пришел к тому же точному выводу, что использование раскадровки остроумных ограничений становится слишком медленным при работе с ячейками определенной сложности. У меня было более 10 различных типов клеток. В этом случае мне пришлось использовать фреймы.

Боюсь, что нет другого способа, чем расставить свои ячейки, используя рамки ваших представлений вашего ребенка. Используя методы heightForRowAtIndexPath и cellForRowAtIndexPath, вы можете полностью стилизовать свои ячейки.

Первый метод, который называется cellForRowAtIndexPath. В этом методе вы полностью настраиваете свои ячейки, выкладывая свои взгляды и т. Д. После того, как вы сделали все, что вы можете определить также высоту ваших клеток. Затем вы можете просто извлечь высоту ячейки из рамки вашего родительского представления и использовать ее.

В heightForRowAtIndexPath у вас может быть одна строка, возвращающая высоту ячейки, если вместо этого вы сохранили высоту в массиве.

Я вроде проигнорировал методы layoutsubviews, так как мне пришлось реорганизовать кучу существующего кода. Однако я выложил ячейку только в cellForRowAtIndexPath, а не в методе layoutsubviews. В этом методе я могу использовать высоту дочерних представлений для вычисления высоты родителя. В layoutsubviews представления выводятся позже, и это может вызвать проблемы.

В любом случае, эта информация полезна кому-то.

Смежные вопросы