我的下面的代码有效,因为它在日志文件中打印了一些内容。但是当按下每个单独的单元格时,单元格中没有任何事情发生在期望打印日志文件中的语句。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! whyCollectionViewCell
UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 2, initialSpringVelocity: 2, animations: {
cell.frame = self.theIssues.bounds
self.theIssues.isScrollEnabled = false
cell.superview?.bringSubview(toFront: cell)
print("d")
}, completion: nil)
}
答案 0 :(得分:1)
替换
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! whyCollectionViewCell
with cellForItem
let cell = collectionView.cellForItemAtIndexPath(indexPath)
答案 1 :(得分:1)
dequeueReusableCell
应该用于为数据源中的项创建单元格,而不是用于获取可见单元格。要获取可见单元格,请使用cellForItem
(由if let
初始化,因为它可以返回零值 - 在您的情况下不应该发生,但让我们使用最佳做法):
if let cell = collectionView.cellForItem(at: indexPath) as? whyCollectionViewCell {
UIView.animate(withDuration: 1, delay: 0.1, usingSpringWithDamping: 2, initialSpringVelocity: 2, animations: {
cell.frame = self.theIssues.bounds
self.theIssues.isScrollEnabled = false
cell.superview?.bringSubview(toFront: cell)
print("d")
}, completion: nil)
}
但是我知道我强烈建议你不要弄乱单元格的框架(cell.superview?.bringSubview(toFront: cell)
也非常可疑) - 这是tableView
的责任。特别是因为你将框架设置为边界 - 这将弄乱单元格的原点,而不仅仅是它的边界。
如果你想做一些效果,我宁愿为单元格的内容设置动画(你负责布局),或者我甚至会考虑拍摄单元格的快照并为其制作动画。当然,所有这些都取决于你想要达到的目标。