patch RNS to fix video dismiss issue
This commit is contained in:
@@ -1,8 +1,32 @@
|
|||||||
diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm
|
diff --git a/node_modules/react-native-screens/ios/RNSScreen.mm b/node_modules/react-native-screens/ios/RNSScreen.mm
|
||||||
index b62a2e2..cb469db 100644
|
index b62a2e2..57e6da4 100644
|
||||||
--- a/node_modules/react-native-screens/ios/RNSScreen.mm
|
--- a/node_modules/react-native-screens/ios/RNSScreen.mm
|
||||||
+++ b/node_modules/react-native-screens/ios/RNSScreen.mm
|
+++ b/node_modules/react-native-screens/ios/RNSScreen.mm
|
||||||
@@ -729,9 +729,26 @@ - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingFor
|
@@ -71,6 +71,7 @@ @implementation RNSScreenView {
|
||||||
|
CGFloat _sheetContentHeight;
|
||||||
|
ContentWrapperBox _contentWrapperBox;
|
||||||
|
bool _sheetHasInitialDetentSet;
|
||||||
|
+ __weak UIWindow *_previousWindow;
|
||||||
|
#ifdef RCT_NEW_ARCH_ENABLED
|
||||||
|
RCTSurfaceTouchHandler *_touchHandler;
|
||||||
|
react::RNSScreenShadowNode::ConcreteState::Shared _state;
|
||||||
|
@@ -672,6 +673,17 @@ - (BOOL)isMountedUnderScreenOrReactRoot
|
||||||
|
|
||||||
|
- (void)didMoveToWindow
|
||||||
|
{
|
||||||
|
+ if (@available(iOS 26, *)) {
|
||||||
|
+ // If we moved from nil to a window, that means a dismiss gesture was cancelled
|
||||||
|
+ // Re-enable interactions that were disabled in willMoveToWindow
|
||||||
|
+ if (self.window != nil && _previousWindow == nil) {
|
||||||
|
+ self.window.userInteractionEnabled = true;
|
||||||
|
+ }
|
||||||
|
+ _previousWindow = nil;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// For RN touches to work we need to instantiate and connect RCTTouchHandler. This only applies
|
||||||
|
// for screens that aren't mounted under RCTRootView e.g., modals that are mounted directly to
|
||||||
|
// root application window.
|
||||||
|
@@ -729,9 +741,30 @@ - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingFor
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10,6 +34,9 @@ index b62a2e2..cb469db 100644
|
|||||||
+- (void)willMoveToWindow:(UIWindow *)newWindow
|
+- (void)willMoveToWindow:(UIWindow *)newWindow
|
||||||
+{
|
+{
|
||||||
+ if (@available(iOS 26, *)) {
|
+ if (@available(iOS 26, *)) {
|
||||||
|
+ // Store the current window to detect cancelled transitions in didMoveToWindow
|
||||||
|
+ _previousWindow = self.window;
|
||||||
|
+
|
||||||
+ // In iOS 26, as soon as another screen appears in transition, it is interactable
|
+ // In iOS 26, as soon as another screen appears in transition, it is interactable
|
||||||
+ // To avoid glitches resulting from clicking buttons mid transition, we temporarily disable all interactions
|
+ // To avoid glitches resulting from clicking buttons mid transition, we temporarily disable all interactions
|
||||||
+ // Disabling interactions for parent navigation controller won't be enough in case of nested stack
|
+ // Disabling interactions for parent navigation controller won't be enough in case of nested stack
|
||||||
@@ -30,7 +57,7 @@ index b62a2e2..cb469db 100644
|
|||||||
// On Paper, we need to call both "cancel" and "reset" here because RN's gesture
|
// On Paper, we need to call both "cancel" and "reset" here because RN's gesture
|
||||||
// recognizer does not handle the scenario when it gets cancelled by other top
|
// recognizer does not handle the scenario when it gets cancelled by other top
|
||||||
// level gesture recognizer. In this case by the modal dismiss gesture.
|
// level gesture recognizer. In this case by the modal dismiss gesture.
|
||||||
@@ -744,8 +761,8 @@ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentati
|
@@ -744,8 +777,8 @@ - (void)presentationControllerWillDismiss:(UIPresentationController *)presentati
|
||||||
// down.
|
// down.
|
||||||
[_touchHandler cancel];
|
[_touchHandler cancel];
|
||||||
[_touchHandler reset];
|
[_touchHandler reset];
|
||||||
@@ -40,7 +67,7 @@ index b62a2e2..cb469db 100644
|
|||||||
|
|
||||||
- (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
|
- (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presentationController
|
||||||
{
|
{
|
||||||
@@ -757,6 +774,10 @@ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presenta
|
@@ -757,6 +790,10 @@ - (BOOL)presentationControllerShouldDismiss:(UIPresentationController *)presenta
|
||||||
|
|
||||||
- (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
|
- (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)presentationController
|
||||||
{
|
{
|
||||||
@@ -51,7 +78,7 @@ index b62a2e2..cb469db 100644
|
|||||||
// NOTE(kkafar): We should consider depracating the use of gesture cancel here & align
|
// NOTE(kkafar): We should consider depracating the use of gesture cancel here & align
|
||||||
// with usePreventRemove API of react-navigation v7.
|
// with usePreventRemove API of react-navigation v7.
|
||||||
[self notifyGestureCancel];
|
[self notifyGestureCancel];
|
||||||
@@ -767,6 +788,11 @@ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)pr
|
@@ -767,6 +804,11 @@ - (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)pr
|
||||||
|
|
||||||
- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
|
- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController
|
||||||
{
|
{
|
||||||
@@ -63,7 +90,7 @@ index b62a2e2..cb469db 100644
|
|||||||
if ([_reactSuperview respondsToSelector:@selector(presentationControllerDidDismiss:)]) {
|
if ([_reactSuperview respondsToSelector:@selector(presentationControllerDidDismiss:)]) {
|
||||||
[_reactSuperview performSelector:@selector(presentationControllerDidDismiss:) withObject:presentationController];
|
[_reactSuperview performSelector:@selector(presentationControllerDidDismiss:) withObject:presentationController];
|
||||||
}
|
}
|
||||||
@@ -1518,6 +1544,10 @@ - (void)viewWillDisappear:(BOOL)animated
|
@@ -1518,6 +1560,10 @@ - (void)viewWillDisappear:(BOOL)animated
|
||||||
|
|
||||||
- (void)viewDidAppear:(BOOL)animated
|
- (void)viewDidAppear:(BOOL)animated
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user