【问题标题】:UICollectionViewCell width greater than UICollectionView error handlingUICollectionViewCell 宽度大于 UICollectionView 错误处理
【发布时间】:2018-01-14 17:45:12
【问题描述】:

我目前正在使用UICollectionViewUICollectionViewFlowLayout 以及以下UICollectionViewCell

但是,最近出现了一个错误,该错误会锁定 UI,并且在检查后控制台不断向控制台吐出以下内容。

在 UICollectionViewFlowLayoutBreakForInvalidSizes 在 调试器。未定义 UICollectionViewFlowLayout 的行为 因为:项目宽度必须小于 UICollectionView 减去部分插入左右值,减去 内容插入左右值。

现在错误很简单,单元格本身的长度大于集合视图的长度。原因是在异常值出现时,有一段数据非常长,导致单元格超出集合视图的范围。

在单元格本身上,我的线条大小为 1,并且尾部被截断。我的假设是自动布局会以这样一种方式处理这个问题,如果单元格大于集合视图宽度,它只会使用单元格上集合视图的宽度并截断标签中的文本。但是,自动布局不会这样做,并且在控制台中会重复产生上述错误。

所以现在的问题是处理这种极端情况的最佳/正确方法是什么?

  1. 有没有我遗漏的小东西?
  2. 在这种情况下,我将不得不“调整”流布局,因此是否建议对流布局进行子类化,覆盖layoutAttributesForElementsInRect:,然后在单元格大小框架/大小大于UICollectionView?这条路线似乎过分杀死错误?

【问题讨论】:

    标签: ios uicollectionviewcell uicollectionviewlayout


    【解决方案1】:

    为您的自定义 UICollectionViewCell 添加小于或等于宽度约束。

    为该约束创建一个出口并将其设置为collectionView(_:cellForItemAt:)

    【讨论】:

    • smaller-than-or-equal 选项在哪里?
    • @Amg91 在视图层次结构中选择约束(左侧)并打开其属性检查器(右侧)。其中一个属性是Relation,点击其下拉菜单选择Less Than or Equal
    【解决方案2】:

    您可以只使用以下 UICollectionViewDelegateFlowLayout 方法来指定给定 indexPath 处项目的大小

    func collectionView(_ collectionView: UICollectionView, 
                      layout collectionViewLayout: UICollectionViewLayout, 
               sizeForItemAt indexPath: IndexPath) -> CGSize
    

    更多详情请查看Apple’s documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多