无法获取用于转换的 collectionViewCell 项目的框架

can't get frame of collectionViewCell item for transition

我正在尝试将视图转换为另一个 viewController 的 collectionViewCell 的 imageView。为此,我需要将 collectionViewCell 中的 imageView 的框架转换为 Window.

我正在尝试在 viewWillAppear 中使用以下内容:

let indexPath = IndexPath(item: 0, section: 0)
let cell = collectionView.cellForItem(at: indexPath) as! ImageCollectionViewCell
let boundingRect = cell.imageView.convert(cell.imageView.bounds, to: nil)

boundingRect 的大小是正确的,但是由于某种原因原点位于 0,0 而不是它应该在的位置。

我想知道是不是collectionView还没有布局导致origin不对的问题。如果是这样的话,我怎么能强制它布局。我试过:

collectionView.setNeedsLayout()
collectionView.layoutIfNeeded()

但这也没有改变原点。

如何强制 collectionView 的布局并在 viewDidAppear 之前获取特定单元格(或该单元格中的 imageView)的框架。我想避免在 viewWillLayoutSubviews 或 viewDidLayoutSubviews 中这样做,以防止这种情况不断发生 运行.

根据https://developer.apple.com/documentation/uikit/uiview/1622498-convert我们需要:

  • view (collectionView.superview),我们要获取子视图的地方 位置,
  • 子视图的框架 (cell.imageView.frame)
  • 和子视图的父视图或 superview.superview 等,任何包含子视图的框架(单元格)的视图

我们得到

let boundingRect = collectionView.superview.convert(cell.imageView.frame, from: cell)