UICollectionView适用于iOS7但不适用于iOS6

时间:2014-03-04 18:36:33

标签: ios ios6 ios7 uicollectionview uicollectionviewlayout

我的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上收到警告,所有单元格也在那里正确显示。

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

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

有什么想法吗? 谢谢!

6 个答案:

答案 0 :(得分:8)

尝试设置self.automaticallyAdjustsScrollViewInsets = NO

这是在中引入的,因此如果您支持及以下版本,则可能需要使用版本检查对其进行修改。

答案 1 :(得分:4)

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

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

我错误地认为问题出在我的collectionview及其colletionview单元格上。

也许?

答案 2 :(得分:3)

self.automaticallyAdjustsScrollViewInsets = NO

实际上是这样做的。它还在swift中解决了我的问题,其中水平流布局的单元格的框架顶部为-32(???),并且不能正确地适合集合视图。

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

我有同样的问题,在我的情况下,故事板中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下的,但已经很晚了,但希望这会有所帮助......干杯......

答案 5 :(得分:-1)

设置:

self.itemSize = CGSizeMake(1, 1);