在我的iOS应用程序中,我有一个UICollectionView,可以从服务器动态更新其内容。假设在UIollectionView中有10个单元格(索引0-9),当我下载其他10个对象时,我将它们插入索引(0-9),将旧项目转换为索引(10-19)。
我的目标是使UICollectionView动画无效,所以,如果我在顶部位置的索引3处有元素,当我添加其他10个项目时,它们被添加为顶部项目,但我再次看到之前显示的相同项目(更新后将在索引13)。
我尝试在UIView.performWithoutAnimation方法中包装UICollectionView项目或使用此代码:
UIView.setAnimationsEnabled(false)
// insert items in collection view using perform batch updates
UIView.setAnimationsEnabled(true)
但结果仍然不好,当我在顶级范围内添加项目时,我的UICollectionView仍然会“随机”滚动。
答案 0 :(得分:1)
如何简单地修改数据数组并在collectionView上使用.reloadData
?
重新加载它不应该进行任何滚动。这意味着如果您位于30元素滚动视图的底部,它将保持在底部。
但是你可以在之后立即拨打电话,它会在有或没有动画的情况下强制滚动到顶部:
collectionview.SetContentOffset(CGPoint.Zero, false);
上面的行是从内存中写的,拼写可能有误。基本上,使用方法而不是属性设置内容偏移量0,0,并使用第二个参数删除动画。
答案 1 :(得分:0)
我没试过,但这里列出了你可以尝试的事项:
self.collectionView.scrollEnabled = false
,在self.collectionView.scrollEnabled = true
self.collectionView.scrollsToTop = false
CGPoint
中保存scrollView的当前位置,然后在更新通话后self.collectionView.setContentOffset(previousPosition, animated: false)
希望这有帮助。