Установка orthogonalScrollingBehavior
в раздел, встраивает внутренний _UICollectionViewOrthogonalScrollerEmbeddedScrollView
, который обрабатывает прокрутку в разделе. Это внутреннее представление прокрутки добавляется в качестве подпредставления к представлению вашей коллекции.
Когда вы устанавливаете себя как delegate
для представления своей коллекции, вы должны получить обратные вызовы делегата для представления прокрутки ТОЛЬКО дляосновной вид коллекции, который прокручивает разделы, а не элементы в разделе. Поскольку внутренние scrollviews (которые также могут быть collectionViews, не уверены) являются совершенно разными экземплярами, и вы не устанавливаете себя в качестве делегата для них, вы не получаете их обратные вызовы.
Итак, насколько я знаю,не должно быть официального способа получить эти обратные вызовы от внутренних представлений прокрутки, которые управляют прокруткой в разделах.
, но если вам интересно, и вы хотите поэкспериментировать с этим, вы можете использовать этот «взломанный» класс collectionView:
import UIKit
final class OrtogonalScrollingCollectionView: UICollectionView {
override var delegate: UICollectionViewDelegate? {
get { super.delegate }
set {
super.delegate = newValue
subviews.forEach { (view) in
guard String(describing: type(of: view)) == "_UICollectionViewOrthogonalScrollerEmbeddedScrollView" else { return }
guard let scrollView = view as? UIScrollView else { return }
scrollView.delegate = newValue
}
}
}
}
, который установит ваш делегат на все внутренние прокрутки, которые идут с ортогональными секциями. Вы не должны использовать это в производственной среде, потому что нет никакой гарантии, что Apple сохранит внутреннюю работу представлений коллекции таким же образом, так что этот хак может не сработать в будущем, плюс вы можете быть отклонены за использование частных API в UIKit. когда вы отправляете сборку для выпуска.