collectionView点击cell变换大小
- 第一种实现方案,用collectionView来实现,控制器称为为collectionView 的UICollectionViewDelegateFlowLayout代理。在点击cell调用代理方法的时候分情况记录当前选中的cell序号,然后调用performBatchUpdates。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
if selectedIndexPath == indexPath {
cell?.layer.borderColor = normalColor
selectedIndexPath = nil
} else {
if selectedIndexPath != nil {
let selectedCell = collectionView.cellForItem(at: selectedIndexPath!)
selectedCell?.layer.borderColor = normalColor
}
self.selectedIndexPath = indexPath
cell?.layer.borderColor = selectedColor
}
self.collectionView.performBatchUpdates({ //这里不需要传递参数,只是为了系统会调用下面两个方法
}) { (finished) in
}
}
- 然后系统会调用以下两个方法,然后对cell大小进行处理即可实现
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if indexPath == selectedIndexPath {
return CGSize.init(width: self.collectionView.frame.width - 40, height: 120);
}
return CGSize.init(width: self.collectionView.frame.width - 40, height: 70);
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets.init(top: 10, left: 20, bottom: 0, right: 20);
}