如何在屏幕显示之前获取 UICollectionView 中的单元格框架?
How do I get the frames of cells in a UICollectionView before the screen has been presented?
在将 UICollectionViewController 的集合视图推送到导航堆栈之前获取前 3 个单元格位置的最佳方法是什么?
例如:
let collectionViewController = SomeCollectionViewControllerSubclass(data: someData)
// @ TODO: get the frames of the first three cells here so I can create a fancy transition
self.navigationController.pushViewController(collectionViewController, animated: true)
这是我尝试过的:
let collectionViewController = SomeCollectionViewControllerSubclass(data: someData)
// force load the view
let view = collectionViewController.view
// try to get a cell directly (result: nil)
println(collectionViewController.collectionView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)
// try to ask the layout for the cell attributes (result: CGRectZero)
println(collectionViewController.collectionView.collectionViewLayout.initialLayoutAttributesForAppearingItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)))
self.navigationController.pushViewController(collectionViewController, animated: true)
有能力的就得自己算了。
您无法在单元格视图显示在屏幕上之前访问它们,因为它们会在系统需要显示它们时创建,以避免在不需要时创建它们。
因此,您必须依靠您的单元格布局知识来了解您是否可以评估它们的位置(例如,您的单元格是否始终具有相同的高度)。
在将 UICollectionViewController 的集合视图推送到导航堆栈之前获取前 3 个单元格位置的最佳方法是什么?
例如:
let collectionViewController = SomeCollectionViewControllerSubclass(data: someData)
// @ TODO: get the frames of the first three cells here so I can create a fancy transition
self.navigationController.pushViewController(collectionViewController, animated: true)
这是我尝试过的:
let collectionViewController = SomeCollectionViewControllerSubclass(data: someData)
// force load the view
let view = collectionViewController.view
// try to get a cell directly (result: nil)
println(collectionViewController.collectionView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)
// try to ask the layout for the cell attributes (result: CGRectZero)
println(collectionViewController.collectionView.collectionViewLayout.initialLayoutAttributesForAppearingItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)))
self.navigationController.pushViewController(collectionViewController, animated: true)
有能力的就得自己算了。
您无法在单元格视图显示在屏幕上之前访问它们,因为它们会在系统需要显示它们时创建,以避免在不需要时创建它们。
因此,您必须依靠您的单元格布局知识来了解您是否可以评估它们的位置(例如,您的单元格是否始终具有相同的高度)。