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 );
}