在顶部

时间:2016-06-23 07:35:38

标签: ios uicollectionview

在我的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仍然会“随机”滚动。

2 个答案:

答案 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)

希望这有帮助。