Большой UICollectionViewCell исчезает с пользовательским макетом

Я создал подкласс UICollectionViewLayout. Пока все хорошо.
Однако у меня есть некоторые ячейки, которые шире экрана, и иногда они исчезают при прокрутке. Когда вы прокручиваете еще немного, они волшебным образом снова появляются там, где должны быть. Я могу показать вам свой код, однако я думаю, что в этом нет ничего плохого, поскольку он работает в 90% случаев. Однако действительно большие ячейки (более чем в два раза больше размера экрана) иногда исчезают.

NSMutableArray* attributes = [NSMutableArray array];
for (int section=0; section < [[self collectionView] numberOfSections]; section++) {
    [attributes addObject:[self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]];
        for (int row=0; row < [[self collectionView] numberOfItemsInSection:section]; row++) {
            NSIndexPath* indexPath = [NSIndexPath indexPathForItem:row inSection:section];
            [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]];
        }
 }
 return attributes;

У меня также есть эти сообщения: ячейка UICollectionView исчезает и Большие ячейки в UICollectionView удаляются, в то время как ячейка все еще отображается Однако решение не упоминается. Может ли кто-нибудь помочь мне с этим? Может проблема на стороне Apple? И если это так, могу ли я что-нибудь сделать, чтобы решить это самостоятельно?


person s1m0n    schedule 07.12.2012    source источник


Ответы (2)


Извините, что говорю вам: я почти уверен, что это настоящая ошибка в UICollectionView; Я столкнулся с точно такой же вещью несколько недель назад. Я сделал небольшую программу для демонстрации ошибки и подал RADAR в Apple, но не получил ответа о том, планируют ли они ее исправить. Лучший обходной путь, который я могу придумать (предупреждение: я еще не реализовал этот обходной путь), состоит в том, чтобы заметить, что атрибуты макета очень далеко от краев экрана, намеренно изменить границы атрибутов ячейки, чтобы они лишь немного ушли screen и, возможно, сохраните это смещение (сумму, которую вы обрезали по сравнению с реальными границами) в качестве дополнительного настраиваемого поля в layoutAttributes, чтобы ваша ячейка знала, как правильно отрисовывать ее содержимое. Это похоже на грубый взлом, но это должно сработать.

person Tim Gogolin    schedule 19.02.2013
comment
Вы слышали назад в промежуточное время? - person Danyal Aytekin; 23.10.2013

Вы уверены, что возвращаете правильный объект атрибута для этой ячейки, когда вызывается метод -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect и когда прямоугольник является просто частью вашей ячейки?

person CitronEvanescent    schedule 20.12.2012
comment
Пользователи также сообщают о проблемах с очень большими ячейками. См.: stackoverflow.com/questions/13016302/ - person CitronEvanescent; 20.12.2012