搜索具有私有 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)
})
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)
})