我有一个UICollectionView
,它有正常的细胞。
每个单元格内都有一个UICollectionViewController
。
当我点击一个单元格时,我将其展开以适合窗口屏幕,但我在这里遇到了一些问题:
如果我在展开的单元格中滚动,整个屏幕会滚动;
我正在尝试阻止superview集合视图点击和滚动。
为了做到这一点,在展开所选单元格以适合所需的框架后,我设置了collectionView.isScrollEnabled = false
和collectionView.isUserInteractionEnabled = false
,但是由此我遇到了另一个问题:扩展的单元格没有与任何触摸互动。
我怎样才能做到这一点?展开单元格并阻止滚动视图滚动,阻止滚动视图交互,但是启用单元格交互(滚动点击等)?
以下是一些代码:
主Feed控制器
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? FeedCell else { return }
let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath)
let cellFrameInSuperview:CGRect = collectionView.convert(theAttributes.frame, to: collectionView)
cell.superview?.bringSubview(toFront: cell)
cell.backupFrame = cellFrameInSuperview
let newFrame = CGRect(x: 0, y: collectionView.contentOffset.y, width: view.frame.width, height: view.frame.height)
UIView.animate(withDuration: 0.2, animations: {
cell.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)
}) { (_) in
UIView.animate(withDuration: 0.1, animations: {
cell.transform = CGAffineTransform(scaleX: 1, y: 1)
}, completion: { (_) in
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 0.6, initialSpringVelocity: 0.7, options: .curveEaseInOut, animations: {
cell.frame = newFrame
},completion: {(_) in
cell.presentDismissButton()
self.collectionView.isScrollEnabled = false
self.collectionView.isUserInteractionEnabled = false
})
})
}
}
扩展单元格关闭按钮属性
@objc func dismiss() {
UIView.animate(withDuration: 0.8, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 1, options: .allowAnimatedContent, animations: {
self.frame = self.backupFrame!
self.sendSubview(toBack: self)
self.dismissButton.alpha = 0
},completion: nil)
}
在dismiss属性中,我可以将superview交互设置为再次启用,但是对于展开的框架,我无法与其交互。
如果我没有禁用Main feed collectionView交互,我在这里遇到的一个问题是,当我点击扩展单元格的任何地方时,它将展开另一个单元格(位于我的扩展单元格后面,它将从{}接收触摸事件{1}}
任何提示? 谢谢。
答案 0 :(得分:0)
如果设置userInteractionEnabled = false
,则无法与任何子视图进行互动。仅仅禁用滚动是不够的?
e.g。尝试删除self.collectionView.isUserInteractionEnabled = false
从你的完成块?