首页 > 解决方案 > 收集单元大小根据下载的图像而变化

问题描述

    let sectionInsets = UIEdgeInsets(top: 50.0,left: 20.0,bottom: 50.0,right: 20.0)


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let paddingSpace = sectionInsets.left * (itemsPerRow + 0.5)
    let availableWidth = view.frame.width - paddingSpace
    let widthPerItem = availableWidth / itemsPerRow

    let size = CGSize(width: widthPerItem, height: widthPerItem)
    return size
    }

这是我的代码。有人可以告诉我为什么单元格的大小会根据下载的图像而变化以及解决方案吗?

我在调试器中也遇到了一个问题 - “在 UICollectionViewFlowLayoutBreakForInvalidSizes 处创建一个符号断点以在调试器中捕获它。”

标签: swiftxcodeimageuicollectionviewcell

解决方案


在 Interface Builder 中将Estimate Size设置为None并覆盖函数“willTransition(to newCollection: with coordinator:)”,如下所示:-

    public override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
    let paddingSpace = sectionInsets.left * (itemsPerRow + 0.5)
    let availableWidth = view.frame.width - paddingSpace
    let widthPerItem = availableWidth / itemsPerRow

    let size = CGSize(width: widthPerItem, height: widthPerItem)

    super.viewWillTransition(to: size, with: coordinator)

    coordinator.animate(alongsideTransition: { (context) in
        self.imageCollectionView.collectionViewLayout.invalidateLayout()
    }) { (context) in

    }
}

推荐阅读