ios - 使用全宽和动态高度单元格重新排序 UICollectionView 时的 UI 问题
问题描述
我有一个 CollectionView,其中的单元格具有全宽和动态(自动布局计算)高度。
我通过设置估计高度来做到这一点:
flowLayout.estimatedItemSize = CGSize(width: 200, height: 10)
然后在委托方法中返回全宽和任意高度。
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.bounds.width, height: 10)
}
然后在单元格中执行以下操作:
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
setNeedsLayout()
layoutIfNeeded()
let size = self.systemLayoutSizeFitting(layoutAttributes.size)
var newFrame = layoutAttributes.frame
// note: don't change the width
newFrame.size.height = ceil(size.height)
layoutAttributes.frame = newFrame
return layoutAttributes
}
一切都按预期工作......单元格大小应有尽有!伟大的!
现在我想添加重新排序...我添加一个 GestureRecognizer 并使其重新排列我的单元格..
@objc func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) {
guard let view = gestureRecognizer.view else { return }
let location = gestureRecognizer.location(in: view)
switch gestureRecognizer.state {
case .began:
guard let selectedIndexPath = collectionView.indexPathForItem(at: location) else { break }
collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
case .changed:
collectionView.updateInteractiveMovementTargetPosition(location)
case .ended:
collectionView.endInteractiveMovement()
default:
collectionView.cancelInteractiveMovement()
}
}
这也基本上可以工作......但是在重新排序期间,我的单元格奇怪地动画......单元格有时会将它们的大小减小到我的 10 大小,但不会让单元格自行测量。放开拖拽后,它再次工作......
我注意到,当我缓存我的 CollectionViewCells 的高度时,它会好一点,但是对于我以前从未见过的所有单元格,它将再次成为 10 点高的单元格。
为了在重新排序期间使单元格大小正确,我缺少什么?
我也有一个有这个问题的示例项目,可以在这里找到:https ://www.dropbox.com/s/ya6zald4wa6kg10/CollectionViewTester.zip?dl=0
解决方案
问题是,当重新排序自动调整大小的单元格时,单元格大小变为estimatedItemSize
.
这里报告了一个开放式雷达。
推荐阅读
- google-cloud-platform - 如何使用谷歌云平台 DLP API
- python - 输入语句的问题
- python - 从 (m,w,l) 到 (w,m,l) 维度的 Numpy 重塑
- javascript - 如果我使用 jQuery 或 javascript 在一个搜索栏或文本框中输入相同的名称或单词两次,则提醒我一条消息
- python - 基本 Python BeautifulSoup 网络抓取 Tripadvisor 评论和数据清理
- python - [Python]如何使用递归编辑嵌套数组配置值
- github - 有没有办法分阶段配置 Travis GitHub Pages Deployment?
- javascript - 使用子主题从 wordpress 主题出列脚本返回“未捕获的 ReferenceError:add_action 未定义”错误
- python - 无法通过 xpath 找到以标题为变量的元素
- c++ - 从类中提供指向私有成员的指针