查看在屏幕上可见但 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 就在那里。
我正在使用 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 就在那里。