CollectionView 在动画期间切断单元格
Posted
技术标签:
【中文标题】CollectionView 在动画期间切断单元格【英文标题】:CollectionView cuts off cells during animation 【发布时间】:2019-03-21 21:20:02 【问题描述】:所以我有一个collectionView,它锚定到我的viewController 中的另一个子视图。橙色子视图锚定在导航栏的底部,它的高度和 alpha 值被动画化。
当它的动画时,collecitonView 在动画期间向下移动。虽然,正如您将看到的,一些较低的单元格在动画之前消失,使其看起来不平滑和锯齿状。
这是设置viewController的子视图的函数:
private func setupSubviews()
view.addSubview(newMessageView)
NSLayoutConstraint.activate([
newMessageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
newMessageView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
newMessageView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
newMessageView.heightConstraint = newMessageView.heightAnchor.constraint(equalToConstant: 0)
newMessageView.heightConstraint?.isActive = true
view.addSubview(messagesCollectionView)
messagesCollectionView.anchor(top: newMessageView.bottomAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
这是被调用的函数:
@objc func newMessage()
toggleHeader = !toggleHeader
UIView.animate(withDuration: 1.0, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations:
if (self.toggleHeader)
self.newMessageView.heightConstraint?.constant = 200
else
self.newMessageView.heightConstraint?.constant = 0
self.view.layoutIfNeeded()
)
我只是更改了我施加的 heightConstraint。我相信它与 didEndDisplaying 函数有关,该函数检测到单元格不可见并将其切断。
我将如何改变或改进这一点?或者有没有办法阻止 collectionView 删除未显示的单元格?
谢谢
【问题讨论】:
请分享你的代码 好的。我已经更新了。 【参考方案1】:没关系。修复。
将 collectionView 的底部锚点更改为 view.safeAreaLayoutGuide.bottomAnchor。
【讨论】:
我正要说(:实际上认为你应该在 messagesCollectionView 上添加 setLayoutIfNeeded,但如果它像这样工作那么完美以上是关于CollectionView 在动画期间切断单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CollectionView 单元格上添加过渡动画?
当它从一个 collectionView 移动到另一个时,如何实现单元格动画?
如何仅为一个 indexPath.row 项目在 CollectionView 单元格中设置动画?
如何快速裁剪collectionview单元格之外的部分图像
如果 UIView 动画在单元格上运行,则不会调用 CollectionView didSelectItemAtIndexPath