NSCollectionView中PerformBatchUpdates的问题

时间:2018-07-05 11:19:48

标签: macos nscollectionview nscollectionviewlayout

我有一个使用自定义布局的NSCollectionView,该布局通过将旧单元格向左滑动而新单元格向右滑动来为其内容设置动画。我用类似于以下代码的动画:

collectionView.animator().performBatchUpdates({
    collectionView.reloadSections(IndexSet(0..<3))
}, completionHandler: nil)

(请注意,为便于说明,此操作已大大简化)

我知道布局可以提供正确的开始和结束帧。但是,当我执行更新时,我看到的是,随着新单元格的滑入和旧单元格的滑出,旧单元格的虚幻副本出现并交叉淡出。

我对此进行了广泛的调查,发现它似乎是由在批处理中执行多个更新类型引起的-如果我仅添加或仅删除一个单元格,它的行为应为正常。但是,如果我同时添加和删除单元格(或重新加载,因为从技术上讲,重新加载是通过串行删除和插入单元格来完成的),那么我会得到幽灵单元格。

任何人都可以阐明发生这种情况的原因或如何预防吗?我想要的只是水平分页效果!

更新:

我已经找到了解决方案,但是感觉就像是在破解,所以我仍然很高兴知道原因。我会忘记使用批处理更新和重新加载部分。相反,我先叫collectionView.animator().deleteSections(),然后叫collectionView.animator().insertSections()。尽管有些恼人的副作用,但我必须在集合视图中永久保留一个空白部分,以防止在删除所有部分时使应用程序崩溃。

0 个答案:

没有答案