最近添加UICollectionView
个自定义UICollectionViewFlowLayout
子类时,collectionView:cellForItemAtIndexPath:
方法仅在
在.xib文件中设置了collectionView,附加了dataSource和delegate,并在视图控制器.h文件中的@interface调用之后添加了UICollectionViewDataSource和UICollectionViewDelegateFlowLayout。
collectionView项目大小,部分插入,行间距和项目间距都在自定义流程布局init方法中设置。
一些代码:
- (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;
}
编辑:问题已解决。我的自定义Flow Layout包含一些使用新UIDynamicAnimator
类的iOS7特定覆盖。这些并没有导致崩溃,但是阻止了在iOS6中绘制单元格。
答案 0 :(得分:1)
以下是我遇到的问题,以防其他人在将来遇到此问题。
我的自定义UICollectionViewFlowLayout包含几个方法覆盖来实现iOS7的新UIKit Dynamics。这些不会导致应用程序崩溃,但会阻止在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];
}
添加if / else语句来检查iOS6或iOS7,只返回相应的响应为我解决了问题。希望这有助于其他人!