UICollectionView 在 iOS7 上工作,但在 iOS6 上不工作



我的UICollectionView单元格不会显示在 iOS6 上,因为我的委托方法cellForItemAtIndexPath没有被调用。我怀疑是因为这个警告:

 the behavior of the UICollectionViewFlowLayout is not defined because:
 the item height must be less that the height of the `UICollectionView`
 minus the section inset's top and bottom values.

我在iOS7上没有收到警告,并且所有单元格也在那里正确显示。

我在.xib中将collectionView框架设置为 270 高度,并且没有定义插图。我在.xib中将单元格高度设置为 270。我可以在运行时打印出我的collectionView帧,它是 271。

此外,我的collectionview实际上位于自定义tableview单元格内。

有什么想法吗?谢谢!

尝试设置self.automaticallyAdjustsScrollViewInsets = NO

这是在ios7中引入的,因此如果您支持ios6及更低版本,则可能需要使用ios版本检查来包装它。

这解决了我的问题!在我的.xib中,将我的集合视图大小单元格大小设置为较小的值。

我的设置是我在自定义tableview单元格中具有此collectionview,并且我确实以编程方式返回tableview单元格的高度(取决于内容)。因此,我的警告可能与我的collectionview不适合tableview牢房有关。因此,将初始collectionview设置为较小的值可以修复它。

我走在错误的道路上,认为问题出在我的collectionview及其colletionview细胞上。

或?

self.automaticallyAdjustsScrollViewInsets = NO

居然做到了。 它还解决了我在 SWIFT 中的问题,其中水平流布局的单元格的框架顶部为 -32 (???),并且无法正确放入集合视图。

我发现我必须在viewWillLayoutSubviews中手动设置self.collectionView.collectionViewLayout.itemSize

- (void)viewWillLayoutSubviews {
   self.collectionView.collectionViewLayout.itemSize = CGRectMake(...);
}

生成相同技巧的另一种可能性是实现该方法
collectionView:layout:sizeForItemAtIndexPath:

有同样的问题,在我的情况下,情节提要中 collectionCell 的大小为 96x96,并且也低于-(CGSize)collectionView:layout:sizeForItemAtIndexPath:

解决方案是删除此委托:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    UIEdgeInsets insets = {.left = 10, .right = 10, .top = 5, .bottom = 5};
    return insets;
}

顺便说一下,这是在ios7下,已经晚了,但希望这会对一些人有所帮助。干杯。。

设置:

self.itemSize = CGSizeMake(1, 1);

最新更新