UITableview дергается при прокрутке из-за создания пользовательских ячеек? - PullRequest
3 голосов
/ 27 августа 2011

Я использовал пользовательский класс ячейки для своего uitableview и использовал в методе cellForRowAtIndexPath.

В этом методе cellIdentifier уже определен, и даже свойство ячейки используется как dequeueReusable.

Но при прокруткемой просмотр таблицы каждый раз, когда создаются мои собственные объекты ячеек и вызываются их методы.Из-за этого на устройстве прокрутка вызывает резкие эффекты.

Я также проверил, если (cell == nil) и внутри него я назначаю свое изображение и метки для этой пользовательской ячейки.Но каждый раз, когда это условие выполняется, и указатель программы входит в это условие.

Пожалуйста, помогите мне в этом.

Если возможно, приведите пример кода.

Заранее спасибо

Мрунал.

Ответы [ 3 ]

14 голосов
/ 06 сентября 2013

У меня довольно сложный UITableViewCell.Для меня хитрость заключалась в том, чтобы установить shouldRasterize слоя клеток на YES.Но в нем появился размытый текст.Чтобы избежать этого я установил шкалу - [self.layer setRasterizationScale:[[UIScreen mainScreen] scale]].

13 голосов
/ 27 августа 2011

Как отмечали многие другие, мы не сможем вам помочь, если вы не разместите свой код (вашего CellForRowAtIndexPath должно быть достаточно).

Вообще говоря, существует множество способов улучшить производительность прокрутки в UITableView иОсновные из них, которые я использую (и использовали в других ответах на переполнение стека):

  1. Всегда повторно используйте ячейки, используйте dequeuereusablecellwithidentifier при создании новых ячеек.Это предотвращает накладные расходы ОС на создание и уничтожение большого количества объектов при быстрой прокрутке.

  2. Свернуть иерархию представлений ячейки.Вместо того, чтобы иметь много видов и подпредставлений, создайте собственный вид и сделайте все свои рисунки ячейки в drawRect.Такие приложения, как Twitter, используют этот подход для сверхбыстрого рисования ячеек.

  3. Убедитесь, что ваши изображения непрозрачны.Это можно сделать, убедившись, что во всех активах изображения нет запеченных альфа-каналов, и установив для непрозрачного свойства слоя значение YES.

  4. Если вы устанавливаете какие-либо свойства изображения ячейкиСвойство слоя (например, тени или прямоугольники с закругленными углами) может повлиять на производительность прокрутки.Помогает установить для слоя shouldRasterize значение YES, но вам следует серьезно задуматься о выполнении каких-либо интенсивных операций рисования в ячейках.

Подробнее см. http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007318-Intro-DontLinkElementID_2

1 голос
/ 27 августа 2011

Это происходит из-за ImageView.Создайте свои метки и imageViews внутри if(cell == nil) в CellAtIndexPathMehtod UITableView и присвойте его значение за пределами этого, если.

И если ваши изображения загружаются с сервера, используйте Асинхронная загрузка изображений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...