UICollection View 在较小的设备上导致“UICollectionViewFlowLayoutBreakForInvalidSizes”

Jev*_*ell 7 ios uicollectionview uicollectionviewcell uicollectionviewlayout swift

在 iPhone 6 Plus 上,集合视图单元格很好,但是在 iPhone 5 等其他设备尺寸上进行测试时,我被“轰炸”

017-06-15 01:59:25.744 HyperTest[3865:8825385] 未定义 UICollectionViewFlowLayout 的行为,因为:2017-06-15 01:59:25.744 HyperTest[3865:8825385] 必须小于项目的宽度UICollectionView 的宽度减去部分插入左右值,减去内容插入左右值。2017-06-15 01:59:25.745 HyperTest[3865:8825385] 相关的 UICollectionViewFlowLayout 实例是 ,它附加到 ; 层 = ; 内容偏移量:{0, 0};contentSize: {414, 219}> 集合视图布局: . 2017-06-15 01:59:25.745 HyperTest[3865:8825385] 在 UICollectionViewFlowLayoutBreakForInvalidSizes 处创建一个符号断点以在调试器中捕获它。

特别是当我这样做时:

let layout = billFeedCollectionView.collectionViewLayout as? UICollectionViewFlowLayout // casting is required because UICollectionViewLayout doesn't offer header pin. It's feature of UICollectionViewFlowLayout
    layout?.sectionHeadersPinToVisibleBounds = true
    layout?.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
Run Code Online (Sandbox Code Playgroud)

无论如何,我能解决这个问题吗?我需要确保单元格缩放并适合所有设备。

Sal*_*ani 5

通过UICollectionViewDelegate您的班级确认。委托方法sizeForItemAtIndexPath将调用 fromUICollectionViewDelegateFlowLayout并且这将在您的类中调用,现在您可以返回UICollectionViewCell.

这对我有用

方法:

collectionView.delegate = self

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
     return CGSizeMake(collectionView.frame.size.width, collectionView.frame.size.height)
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*ael 5

也有可能当你在 UITableViewCell 中有一个 collectionView 时,这个单元格实际上将 collectionView 的高度调整为 0。

就我而言,它collectionView显示了一个数组,UIImageView用于在每个单元格中显示一些图像库。如果单元格不应该显示任何图像(例如没有图像的文本),则该单元格collectionView将被隐藏。

collectionView如果放入 StackView 中,可能需要有高度限制,为了避免冲突,您可能需要将其设置为优先级 999。

然后,当您隐藏collectionView,它实际上会尝试将高度设置为 0。collectionView 中仍然可以包含图像,这将触发错误。

解决方案:在配置单元时清空datasource并重新加载。collectionView