搜索具有私有 API class 名称的子视图会被拒绝吗?

Will searching for a subview with a private API class name be rejected?

Apple 最近为 UICollectionViews 推出了 UICollectionViewCompositionalLayout,这太棒了。它们唯一的限制是,当将 orthogonalScrollingBehavior 设置为 continuous 时,滚动视图委托方法和 collectionView 的 contentOffset 将丢失,因为 "scrolling behaviour" 是通过完全不同的滚动完成的未向用户提供视图。

对于一个非必要的纯精细功能,我需要访问集合视图的 contentOffset,在使用新的 UICollectionViewCompositionalLayout 时它总是 (0, 0)。但是,如果我只是将抽象化 UIScrollView 然后我可以检查 contentOffset 并用它进行必要的计算。

我实现这个的代码:

let view = collectionView.subviews.first(where: { view in
  return String(describing: type(of: view)) == "_UICollectionViewOrthogonalScrollerEmbeddedScrollView"
})

return view as? UIScrollView

我知道这可能会在明天更改并在发布新版本 iOS 时破坏此代码。正如我所说,这主要是我真正想要拥有的一个很好的功能,但它对应用程序的其余部分来说基本上是无关紧要的。除此之外,这会让我因 "using" 私有 API 而被拒绝吗?

您可以使用 visibleItemsInvalidationHandler 获取 contentOffset

layoutSection.visibleItemsInvalidationHandler = ({ (visibleItems, point, env) in
         print(point)
    })