mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fix crash when navigating away from screens (#46559)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46559 There is an edge case when we navigate away from a screen that contains a scroll view where one of the UISCrollViewDelegates does not implement the scrollViewDidEndDecelerating method. This happens because the Macro used assumes that the event that we are forwarding is the actual method from where the macro is called. Which is not true when it comes to `didMoveToWindow`. This change fixes that by explicitly expanding the macro in this scenario and passing the right selector. ## Changelog: [iOS][Fixed] - Fixed a crash when navigating away from a screen that contains a scrollView ## Facebook This should fix T201780472 Reviewed By: philIip Differential Revision: D62935876 fbshipit-source-id: e29aadf201c8066b5d3b7b0ada21fa8d763e9af0
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2524c8eb72
commit
c6f32828b9
@@ -856,7 +856,14 @@ RCT_SCROLL_EVENT_HANDLER(scrollViewDidScrollToTop, onScrollToTop)
|
||||
if (_scrollView.isDecelerating || !_scrollView.isTracking) {
|
||||
// Trigger the onMomentumScrollEnd event manually
|
||||
RCT_SEND_SCROLL_EVENT(onMomentumScrollEnd, nil);
|
||||
RCT_FORWARD_SCROLL_EVENT(scrollViewDidEndDecelerating : _scrollView);
|
||||
// We can't use the RCT_FORWARD_SCROLL_EVENT here beacuse the `_cmd` parameter passed
|
||||
// to `respondsToSelector` is the current method - so it will be `didMoveToWindow` - and not
|
||||
// `scrollViewDidEndDecelerating` that is passed.
|
||||
for (NSObject<UIScrollViewDelegate> *scrollViewListener in _scrollListeners) {
|
||||
if ([scrollViewListener respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {
|
||||
[scrollViewListener scrollViewDidEndDecelerating:_scrollView];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user