diff options
Diffstat (limited to 'src/plugins/platforms/ios')
-rw-r--r-- | src/plugins/platforms/ios/qiosviewcontroller.mm | 10 | ||||
-rw-r--r-- | src/plugins/platforms/ios/quiview_accessibility.mm | 5 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm index e17da6cc06..cf8324505a 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.mm +++ b/src/plugins/platforms/ios/qiosviewcontroller.mm @@ -145,9 +145,13 @@ UIWindow *uiWindow = self.window; if (uiWindow.screen != [UIScreen mainScreen] && self.subviews.count == 1) { - // Removing the last view of an external screen, go back to mirror mode - uiWindow.screen = [UIScreen mainScreen]; - uiWindow.hidden = YES; + // We're about to remove the last view of an external screen, so go back + // to mirror mode, but defer it until after the view has been removed, + // to ensure that we don't try to layout the view that's being removed. + dispatch_async(dispatch_get_main_queue(), ^{ + uiWindow.hidden = YES; + uiWindow.screen = [UIScreen mainScreen]; + }); } } diff --git a/src/plugins/platforms/ios/quiview_accessibility.mm b/src/plugins/platforms/ios/quiview_accessibility.mm index 6612dc131e..9a103509cc 100644 --- a/src/plugins/platforms/ios/quiview_accessibility.mm +++ b/src/plugins/platforms/ios/quiview_accessibility.mm @@ -66,6 +66,11 @@ - (void)initAccessibility { + // The window may have gone away, but with the view + // temporarily caught in the a11y subsystem. + if (!self.platformWindow) + return; + static bool init = false; if (!init) QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true); |