2015-08-24 2 views
0

У меня есть UICollectionView, который должен показывать эскизы фотографий, полученных с сервера, очень похоже на приложение «Фото» в iOS.UICollectionViewCell скремблирует положение при повторном входе в экран?

Когда ячейки исчезают с точки зрения, а затем снова появляются, их позиции меняются вверх до момента, когда палец отпускает экран.

Как только палец отпускает экран, ячейки также правильно позиционируются.

Я не могу понять, почему iOS делает это.

В следующем GIF вы увидите ячейки и метку внутри, указав свой индекс в своем разделе.

Как вы можете видеть, индекс изменяется, как я объяснял выше.

enter image description here

Почему это происходит?

Btw игнорирует шестое изображение, я просто пил суп.

EDIT: Я заметил шаблон, когда линия ячеек снова входит в экран. Этот шаблон не отображается на изображении выше, поэтому я просто должен объяснить его в тексте. Итак, при запуске, поскольку вы можете видеть, что индекс изображений увеличивается, от 0 до 4, правильно? Когда я держу палец вниз и прокручиваю линию ячеек в и вне видимости , индексы клеток меняются на 3, 1, 4, 2, 0. , а затем второй повторный ввод, который меняет свои индексы на 2, 1, 0, 4, 3. При третьем повторном входе они меняются на 4, 1, 3, 0, 2. И, наконец, после четвертого повторного входа они возвращают в исходные индексы 0,1,2, 3,4.

Это происходит до тех пор, пока я просматриваю первую строку ячеек внутри и вне поля зрения.

Это супер-странно и не имеет никакого смысла для меня.

EDIT 2: Ok, так что кажется, что повторное упорядочение клеток к их правильному индексу происходит только тогда, когда их образы изменяются/повторно применены.

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

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

Редактировать 3: Yaaay исправил это!

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

Итак, мой вопрос заключается в том, что эффективность моего повторного использования ячеек, возможно, не настолько эффективна?

ответ

0

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

Что нужно сделать в cellForItemAtIndexPath - это еще раз настроить вашу камеру.

Под «установкой» я хочу взять информацию из источника данных и снова применить ее к своей ячейке.

Так что, если ячейка 0 повторно появляется в NSIndexPath секции 0 и пункта 4, то вы просто перейдите на источник данных и читать данные, которые должны быть представлены в NSIndexPath разделе 0 и п 4.

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