关闭屏幕时未调用 UICollectionView performBatchUpdates 完成

UICollectionView performBatchUpdates completion not called while off screen

我正在为我的视图控制器使用快照测试。这是在测试中初始化视图控制器的方式:

window.addSubview(viewController.view) // simulate the view is visible (probably unnecessary)
viewController.view.frame = self.snapshotFrame // set frame
viewController.beginAppearanceTransition(true, animated: false) // simulate VC's life cycle
viewController.endAppearanceTransition()

我的视图控制器包含 UICollectionView。当我使用 performBatchUpdates 执行集合视图更新时,即使更新块已完成,也永远不会调用完成。

// Animate udpates
self.collectionView.performBatchUpdates({
      // is called 
}, completion: { _ in
      // never called
})

我觉得和collection view的离屏渲染有关。有人有类似问题的经验吗?我缺少什么让 UICollectionView 相信它在屏幕上?

我发现了问题。这完全取决于适当的时机。测试用例在调用完成之前完成并且视图控制器被释放。

我通过设置

加快了集合视图动画
viewController.view.layer.speed = 100 // speed up animations

并将测试用例的超时时间增加到 0.1 秒。现在一切正常。