我想知道 a 何时UICollectionViewCell
显示在实际屏幕上。 cellForRowAtIndexPath
是不够的,因为此时实际上没有看到单元格。 didEndDisplayingCell
是不够的,因为当单元格从视图中移除时它会被调用。
UITableViewDelegate
有一种willDisplayCell
我过去发现对类似东西有用的方法,但它似乎不存在于UICollectionViewDelegate
.
如何确定单元格何时出现在屏幕上?
我想知道 a 何时UICollectionViewCell
显示在实际屏幕上。 cellForRowAtIndexPath
是不够的,因为此时实际上没有看到单元格。 didEndDisplayingCell
是不够的,因为当单元格从视图中移除时它会被调用。
UITableViewDelegate
有一种willDisplayCell
我过去发现对类似东西有用的方法,但它似乎不存在于UICollectionViewDelegate
.
如何确定单元格何时出现在屏幕上?
做一个子类UICollectionViewCell
。覆盖其didMoveToWindow
方法:
- (void)didMoveToWindow {
if (self.window != nil) {
// I am now in the window's view hierarchy and thus “on screen”.
}
}
从技术上讲,单元格可能仍然不可见,要么是因为它超出了窗口的可见边界,要么是因为它被另一个视图覆盖。但通常情况下两者都不是。
另请注意,如果一个单元格被重用,它可能不会从视图层次结构中删除或重新添加到视图层次结构中。集合视图只能更改单元格的框架。(我知道iOS 6.0 的表格视图单元格会这样做。)在这种情况下,当单元格被重新用于另一个项目时UITableView
,您不会收到消息。didMoveToWindow
如果您解释为什么您想知道何时显示单元格,我们可能会给您一个更好的答案。
-[UICollectionView visibleCells]
返回 screnn 上可见的所有单元格的 NSArray