Загадочная проблема с UITableView - PullRequest
2 голосов
/ 27 августа 2009

Я новичок в разработке для iPhone. Я работаю над табличным представлением (подкласс UITableView по умолчанию), которое содержит сложные пользовательские ячейки с несколькими подвидами и элементами управления. Прокрутка не очень плавная, но я пока оставлю это.

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

Если таблица содержит очень мало строк, скажем, 5 или 6, она никогда не застревает. Я использовал класс пользовательских ячеек из приведенного здесь примера: http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/

Может кто-нибудь дать подсказку или решение этой проблемы? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 10 августа 2012

Для потомков, и действует только в том случае, если вы используете Unity-iphone: эта проблема сводила меня с ума, и я исправил ее, предложив в этом сообщении:

http://forum.unity3d.com/threads/113815-quot-Sticky-quot-scrolling-in-UITableView-and-UIScrollView-when-interfacing-Unity-and-Obj-C

Изменение флага препроцессора на

#define USE_DISPLAY_LINK_IF_AVAILABLE 0

дал этому вопросу счастливый конец.

1 голос
/ 27 августа 2009
  1. Ячейки таблицы создаются только при необходимости, то есть когда они появляются, и они обычно выгружаются и освобождаются, когда они выходят из поля зрения.
  2. Вставьте NSLog( @"Cell loading" ); в код создания ячейки и проверьте консоль, чтобы увидеть, как это происходит при прокрутке.
  3. Вы используете кеширование? Документы демонстрируют, как можно кэшировать ячейки таблицы для повышения производительности. Что еще вы делаете, когда создаете table cells? Если есть какое-либо замедление производительности, вы, вероятно, не должны этого делать при создании ячеек.
  4. Что я делаю, так это то, что я генерирую все свое содержимое до загрузки таблицы и когда создаются ячейки, все это содержимое просто помещается в представление.
  5. Любой тип рисования резко снижает производительность, особенно если вы используете прозрачность.
0 голосов
/ 27 августа 2009

Я бы взглянул на ваш метод cellForRowAtIndexPath - для пары возможных проблем.

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

Если вы опубликуете свой код для этого метода, мы можем дать вам несколько советов о том, что может быть его причиной.

...