У меня есть UICollectionView с пользовательским макетом. Макет расширяет UICollectionViewLayout
, а не макет потока, и я переопределяю следующие методы:
collectionViewContentSize
shouldInvalidateLayoutForBoundsChange:
prepareLayout
layoutAttributesForElementsInRect:
layoutAttributesForItemAtIndexPath:
Сами ячейки очень большие, каждая больше экрана самого iPad. При панорамировании по представлению коллекции редко исчезают ячейки. Это очень редко, поэтому мне пришлось создавать минимальный пример, который всегда отображает проблему, в противном случае может потребоваться несколько минут, чтобы вручную воспроизвести новую сборку.
Приведенный ниже код содержит жестко закодированные кадры и преобразования длякаждый путь индекса. Пути с добавленным преобразованием вращения, кажется, показывают проблему проще всего (хотя я также воспроизводил на ячейках без преобразования вращения и раньше). Все ячейки имеют преобразования / масштабные преобразования.
Важно, что layoutAttributesForElementsInRect:
всегда возвращает действительные атрибуты, которые должны отображаться, но представление коллекции иногда игнорирует атрибуты и не отображает ячейку?
минимальный пример по адресу: https://github.com/adamwulf/CollectionViewDisappearingCells
Это ошибка UICollectionView
? Это что-то еще, что я пропускаю? Я уже сталкивался с подобными проблемами переполнения стека, но все они, похоже, ссылаются на UICollectionViewFlowLayout
, а не на полностью собственные макеты. Их решение - вернуть правильные атрибуты из layoutAttributesForElementsInRect:
, которые я уже делаю.
Обновление: Я даже пытался вернуть все атрибуты макета из layoutAttributesForElementsInRect:
, так как у меня всего ~ 20 предметов. но все время возвращать все равно не решает проблему, поэтому проблема не в том, что атрибуты не возвращаются, когда они должны быть.
Обновление: Это больше похоже на UICollectionView
ошибка. Если я откорректирую frame.origin.x
или frame.size.width
каждого элемента, добавив всего лишь 0.0000000000001;
, то ячейка больше не исчезает.
Исходный кадр элемента - (280.39666002633368, -220.39666002633371, 595.71428571428578, 834)
. Я могу только предположить, что есть некоторые вычисления в UICollectionView, которые имеют ошибку округления, что этот конкретный кадр (или другие уникальные кадры), который вызывает ошибку. Если у кого-то есть правильное решение / объяснение этой ошибки, я хотел бы услышать это. А пока я просто округлю значения каждого frame
, чтобы обойти проблему.