@@ -75,7 +75,19 @@ - (void)presentModalHostView:(RCTModalHostView *)modalHostView withViewControlle
75
75
if (_presentationBlock) {
76
76
_presentationBlock ([modalHostView reactViewController ], viewController, animated, completionBlock);
77
77
} else {
78
- [[modalHostView reactViewController ] presentViewController: viewController animated: animated completion: completionBlock];
78
+ UIViewController *topViewController = [modalHostView reactViewController ];
79
+ while (topViewController.presentedViewController != nil ) {
80
+ if ([topViewController.presentedViewController isKindOfClass: UIAlertController.class]) {
81
+ // Don't present on top of UIAlertController, this will mess it up:
82
+ // https://stackoverflow.com/questions/27028983/uialertcontroller-is-moved-to-buggy-position-at-top-of-screen-when-it-calls-pre
83
+ [topViewController dismissViewControllerAnimated: animated completion: ^{
84
+ [topViewController presentViewController: viewController animated: animated completion: completionBlock];
85
+ }];
86
+ return ;
87
+ }
88
+ topViewController = topViewController.presentedViewController ;
89
+ }
90
+ [topViewController presentViewController: viewController animated: animated completion: completionBlock];
79
91
}
80
92
}
81
93
@@ -89,7 +101,13 @@ - (void)dismissModalHostView:(RCTModalHostView *)modalHostView withViewControlle
89
101
if (_dismissalBlock) {
90
102
_dismissalBlock ([modalHostView reactViewController ], viewController, animated, completionBlock);
91
103
} else {
92
- [viewController.presentingViewController dismissViewControllerAnimated: animated completion: completionBlock];
104
+ if (viewController.presentedViewController && viewController.presentingViewController ) {
105
+ // Ask the presenting view controller to dismiss any view controllers presented on top of the modal host
106
+ // together with the host itself.
107
+ [viewController.presentingViewController dismissViewControllerAnimated: animated completion: completionBlock];
108
+ } else {
109
+ [viewController dismissViewControllerAnimated: animated completion: completionBlock];
110
+ }
93
111
}
94
112
}
95
113
0 commit comments