查看在屏幕上可见但 didMoveToWindow: 等从未调用

View Visible on Screen but didMoveToWindow: etc Never Called

我正在使用 didMoveToWindow: 通过自定义 UICollectionViewCell 触发动画。奇怪的是...第一个和第二个单元格的动画完美运行(并且调用了所有应该调用的方法)...

... 对于第 3 个单元格,它会显示,但是 didMoveToWindow:willMoveToWindow:didMoveToSuperview:willMoveToSuperview: 都不会在第 3 个单元格中被调用。我什至试过 drawRect: 但它也从未被调用过...

我不明白如何在不调用 drawRect: 的情况下在屏幕上绘制它。

drawRect:我只是打印到log,然后调用super实现。即使从未调用/打印日志消息,这样做确实会将背景变黑(通常它是透明的)。所以那一定是……做了什么……?

每个单元格出现在该位置周围,然后移动到位。背景表示 UICollectionView 的框架.. 以显示一切都在边界内。

更新: 我尝试使用 didAddSubview:,但同样的事情......它只对前两个单元格进行过调用。虽然,当插入第 3 个单元格并重新加载第 2 个单元格时,第 2 个单元格调用 didAddSubview:...集合视图的可见单元格计数为 3.

更新2: 当我通过 Xcode 检查视图层次结构时,它显示所有 3 个单元格作为集合的子视图....但不知何故它只为前两个调用 addSubview: didAddSubview:.. 奇怪

这几天忙于其他工作,昨晚又回到了这个问题...神奇的是这个错误不见了! (在我做了一些意外的重构之后)。

在我执行 "performBatchUpdates:" 之前,我 1) 重新加载了之前的单元格,2) 插入了新单元格。当我这样做时,从未在插入的单元格上调用视图生命周期事件(从第 3 个单元格开始)。

当我切换到手动重新加载前一个单元格的视图(只是更改蒙版视图,所以没有理由正式重新加载单元格)通过 "cellForItemAtIndexPath:" 捕获它,并且只在执行批量更新...我现在收到插入单元格的所有正确视图生命周期事件。

所以 bug 就在那里。