我有一个水平 UICollectionview,我需要在其中转换或减小未选中单元格的大小。我在 sizeForItem 委托函数中为所有单元格提供了一个通用大小。我已经给出了在单元格之间保持的最小行间距。但是当重新缩放单元格时的问题可以说(0.8 缩放)单元格之间的空间越来越宽并且不能保持共同的大小。
这是collectionView的一些代码片段,
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 400, height: 400)
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 24, bottom: 24, right: 24)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 20
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as? SomeCellClass
cell.loadUI()
if indexPath == selectedIndex {
cell?.performScaleTransformation(reScale: false)
}
else{
cell?.performScaleTransformation(reScale: true)
}
}
return cell ?? UICollectionViewCell()
}
///这个函数在Cell类 SomeCellClass: UICollectionviewCell
func performScaleTransformation(reScale: Bool) {
if reScale {
UIView.animate(withDuration: 0.3, delay: 0.0, options: [ .curveEaseOut], animations: {
self.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
}, completion: nil)
}
else {
UIView.animate(withDuration: 0.3, delay: 0.0, options: [ .curveEaseOut], animations: {
self.transform = .identity
}, completion: nil)
}
}
下面是我用这段代码得到的输出,
从随附的屏幕截图中,您可以看到单元格之间的空间是如何变化的。