diff --git a/ios/PagerScrollDelegate.swift b/ios/PagerScrollDelegate.swift index 5b09e032..96ffea59 100644 --- a/ios/PagerScrollDelegate.swift +++ b/ios/PagerScrollDelegate.swift @@ -20,6 +20,7 @@ class PagerScrollDelegate: NSObject, UIScrollViewDelegate, UICollectionViewDeleg ] func scrollViewDidScroll(_ scrollView: UIScrollView) { + defer { originalDelegate?.scrollViewDidScroll?(scrollView) } let isHorizontal = orientation == .horizontal let pageSize = isHorizontal ? scrollView.frame.width : scrollView.frame.height let contentOffset = isHorizontal ? scrollView.contentOffset.x : scrollView.contentOffset.y @@ -31,7 +32,6 @@ class PagerScrollDelegate: NSObject, UIScrollViewDelegate, UICollectionViewDeleg let eventData = OnPageScrollEventData(position: position, offset: offset) delegate?.onPageScroll(data: eventData) - originalDelegate?.scrollViewDidScroll?(scrollView) } /// Emits a final onPageScroll with offset 0 before transitioning to idle, @@ -86,11 +86,10 @@ class PagerScrollDelegate: NSObject, UIScrollViewDelegate, UICollectionViewDeleg } override func responds(to aSelector: Selector!) -> Bool { - handledSelectors.contains(aSelector) || (originalDelegate?.responds(to: aSelector) ?? false) + super.responds(to: aSelector) || handledSelectors.contains(aSelector) || (originalDelegate?.responds(to: aSelector) ?? false) } override func forwardingTarget(for aSelector: Selector!) -> Any? { handledSelectors.contains(aSelector) ? nil : originalDelegate } } - diff --git a/ios/PagerView.swift b/ios/PagerView.swift index 5d90f7f6..80bdd3da 100644 --- a/ios/PagerView.swift +++ b/ios/PagerView.swift @@ -38,6 +38,11 @@ struct PagerView: View { .ignoresSafeArea() .environment(\.layoutDirection, props.layoutDirection.converted) .introspect(.tabView(style: .page), on: .iOS(.v14...)) { collectionView in + if let previousCollectionView = self.collectionView, + previousCollectionView !== collectionView, + previousCollectionView.delegate === scrollDelegate { + previousCollectionView.delegate = scrollDelegate.originalDelegate + } self.collectionView = collectionView collectionView.bounces = props.overdrag collectionView.isScrollEnabled = props.scrollEnabled @@ -45,7 +50,7 @@ struct PagerView: View { collectionView.showsVerticalScrollIndicator = false collectionView.showsHorizontalScrollIndicator = false - if scrollDelegate.originalDelegate == nil { + if collectionView.delegate !== scrollDelegate { scrollDelegate.originalDelegate = collectionView.delegate scrollDelegate.delegate = delegate // VTabView-style rotation preserves TabView's horizontal collection view.