1

Когда недавно добавив UICollectionView с пользовательским UICollectionViewFlowLayout подклассом методом collectionView:cellForItemAtIndexPath: является только вызываются на iOS7, а не на iOS6. Другими словами, все отлично работает в iOS7, но мои пользовательские элементы коллекцииView не отображаются в iOS6. Интересно, что ячейки, кажется, там (свитки коллекцииView), но все предметы пустые с белым фоном.cellForItemAtIndexPath: стрельба в iOS7, но не iOS6

CollectionView был настроен в файле .xib, dataSource и делегат были присоединены, а UICollectionViewDataSource и UICollectionViewDelegateFlowLayout были добавлены после вызова @interface в файле .h-файла представления.

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

Некоторый код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.collectionView.collectionViewLayout = [[TFSpringFlowLayout alloc] init]; 
    [self.collectionView registerClass:[TFWorkoutCell class] forCellWithReuseIdentifier:CellIdentifier]; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    // This method is returning a value > 0 
    return _workouts.count; 
} 

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // This is being called on iOS7, but is never being called on iOS6 
    ...removed for clarity 
    return cell; 
} 

EDIT: Проблема решаемая. В моем настраиваемом макете потока были включены некоторые переопределения, зависящие от iOS7, с использованием нового класса UIDynamicAnimator. Они не вызывают сбоя, но препятствуют тому, чтобы клетки были втянуты в iOS6.

+1

Я бы предположил, что проблема связана с вашей компоновкой, поэтому было бы полезно увидеть содержимое «TFSpringFlowLayout» и любые связанные с ним методы делегата. –

ответ

1

Вот что я имел в виду, если кто-то еще столкнется с этой проблемой в будущем.

My custom UICollectionViewFlowLayout содержит несколько переопределений методов для реализации новой модели UIKit Dynamics iOS7. Это не вызывало сбоя приложения, но не позволяло ячейкам рисоваться в iOS6.

Вот код обижая:

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { 
    return [self.dynamicAnimator itemsInRect:rect]; 
} 

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { 
    return [self.dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath]; 
} 

И простое изменение, необходимое для исправления:

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { 
    if ([UIDynamicAnimator class]) 
     return [self.dynamicAnimator itemsInRect:rect]; 
    else 
     return [super layoutAttributesForElementsInRect:rect]; 
} 

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { 
    if ([UIDynamicAnimator class]) 
     return [self.dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath]; 
    else 
     return [super layoutAttributesForItemAtIndexPath:indexPath]; 
} 

Добавление если/другое заявление для проверки iOS6 или iOS7 и только возвращая соответствующий ответ исправил проблему для меня. Надеюсь, это поможет кому-то еще!

+0

Вы должны обновить этот ответ исправлением, а не только проблемой. – rmaddy

+0

@rmaddy добавил исправление, спасибо! –

+0

FYI - это нехорошее решение. Всегда лучше проверить наличие класса или метода вместо проверки версии ОС. – rmaddy

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