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

Posted

技术标签:

【中文标题】搜索具有私有 API 类名的子视图会被拒绝吗?【英文标题】:Will searching for a subview with a private API class name be rejected? 【发布时间】:2019-12-12 19:58:34 【问题描述】:

Apple 最近为UICollectionViews 推出了UICollectionViewCompositionalLayout,非常棒。它们唯一的限制是,当将orthogonalScrollingBehavior 设置为continuous 时,collectionView 的滚动视图委托方法和contentOffset 丢失了,因为“滚动行为”是通过完全不同的滚动视图而不给用户来完成的。

对于一个非必要的纯精细功能,我需要访问集合视图的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 时破坏此代码。正如我所说,这主要是我非常想拥有的一个很好的功能,但它对应用程序的其余部分几乎是无关紧要的。除此之外,这会让我因“使用”私有 API 而被拒绝吗?

【问题讨论】:

【参考方案1】:

您可以使用visibleItemsInvalidationHandler 来获取 contentOffset

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

【讨论】:

当时不知道这个解决方案!

以上是关于搜索具有私有 API 类名的子视图会被拒绝吗?的主要内容,如果未能解决你的问题,请参考以下文章

缩放嵌套在 UIScrollView 中的子视图

通过 iOS 应用程序的 webview 付款(例如 iOS 的 PayPal API 或信用卡)会被苹果应用商店拒绝吗?

如果超出父视图边界,iOS7的子视图会被修剪[重复]

在不破坏约束的情况下将 UIView 的子视图移植到 UIScrollView?

在没有私有 API 的情况下以纵向 MPMoviePlayerController 播放视频 - 我会被 Apple 拒绝吗?

NSLayoutConstraint 用于代码中未知数量的子视图