【问题标题】:UICollectionView working on iOS7 but not on iOS6UICollectionView 适用于 iOS 7 但不适用于 iOS 6
【发布时间】:2014-04-06 11:21:30
【问题描述】:

我的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 单元格中。

有什么想法吗? 谢谢!

【问题讨论】:

    标签: ios ios6 ios7 uicollectionview uicollectionviewlayout


    【解决方案1】:

    尝试设置self.automaticallyAdjustsScrollViewInsets = NO

    这是在 中引入的,因此如果您支持 及以下版本,您可能需要使用 版本检查来包装它。

    【讨论】:

    • 不太清楚为什么会这样,但它只是清除了过去两个小时我一直在调试的 UICollectionViewFlowLayout 警告。谢谢!
    • 它实际上在 ios7 上运行良好,所以不幸的是这个属性在这种情况下对我没有帮助,因为我在 ios6 上看到了这个问题。
    【解决方案2】:

    这解决了我的问题!在我的.xib 中,将我的 Collection View Size Cell Size 设置为较小的值。

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

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

    也许?

    【讨论】:

      【解决方案3】:
      self.automaticallyAdjustsScrollViewInsets = NO
      

      确实成功了。它还迅速解决了我的问题,其中水平流布局的单元格的框架顶部为 -32 (???) 并且不适合集合视图。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 感谢问题编辑。我的 collectionview 实际上是自定义 tableview 单元格中的一个组件。有点困惑这行代码放在哪里?
        • 每当主框架发生变化时(在初始布局、旋转等期间),都会调用 VC 的 viewWillLayoutSubviews。这只是您覆盖的一种方法(默认不执行任何操作)。我猜这对你的情况没有多大好处。在问题编辑中,我修复了 "that" v "than" 错字,然后我在另一个问题中注意到它实际上是 Apple 的错字!
        • 哈哈是的,看到这个错字总是让我很烦!顺便看看我的回答。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          设置:

          self.itemSize = CGSizeMake(1, 1);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多