Merge pull request #534 from GEDYSIntraWare/fix-show-ios13
Fix inappbrowser not opening on iOS 13 by using reusable window. Resolves #492
This commit is contained in:
commit
ba345b0159
@ -27,6 +27,8 @@
|
||||
@class CDVWKInAppBrowserViewController;
|
||||
|
||||
@interface CDVWKInAppBrowser : CDVPlugin {
|
||||
UIWindow * tmpWindow;
|
||||
|
||||
@private
|
||||
NSString* _beforeload;
|
||||
BOOL _waitForBeforeload;
|
||||
|
@ -80,6 +80,7 @@ static CDVWKInAppBrowser* instance = nil;
|
||||
NSLog(@"IAB.close() called but it was already closed.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Things are cleaned up in browserExit.
|
||||
[self.inAppBrowserViewController close];
|
||||
}
|
||||
@ -275,7 +276,9 @@ static CDVWKInAppBrowser* instance = nil;
|
||||
_waitForBeforeload = ![_beforeload isEqualToString:@""];
|
||||
|
||||
[self.inAppBrowserViewController navigateTo:url];
|
||||
[self show:nil withNoAnimate:browserOptions.hidden];
|
||||
if (!browserOptions.hidden) {
|
||||
[self show:nil withNoAnimate:browserOptions.hidden];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)show:(CDVInvokedUrlCommand*)command{
|
||||
@ -314,19 +317,21 @@ static CDVWKInAppBrowser* instance = nil;
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
if (weakSelf.inAppBrowserViewController != nil) {
|
||||
float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
|
||||
CGRect frame = [[UIScreen mainScreen] bounds];
|
||||
if(initHidden && osVersion < 11){
|
||||
frame.origin.x = -10000;
|
||||
__strong __typeof(weakSelf) strongSelf = weakSelf;
|
||||
if (!strongSelf->tmpWindow) {
|
||||
CGRect frame = [[UIScreen mainScreen] bounds];
|
||||
if(initHidden && osVersion < 11){
|
||||
frame.origin.x = -10000;
|
||||
}
|
||||
strongSelf->tmpWindow = [[UIWindow alloc] initWithFrame:frame];
|
||||
}
|
||||
|
||||
UIWindow *tmpWindow = [[UIWindow alloc] initWithFrame:frame];
|
||||
UIViewController *tmpController = [[UIViewController alloc] init];
|
||||
|
||||
[tmpWindow setRootViewController:tmpController];
|
||||
[tmpWindow setWindowLevel:UIWindowLevelNormal];
|
||||
|
||||
|
||||
[strongSelf->tmpWindow setRootViewController:tmpController];
|
||||
[strongSelf->tmpWindow setWindowLevel:UIWindowLevelNormal];
|
||||
|
||||
if(!initHidden || osVersion < 11){
|
||||
[tmpWindow makeKeyAndVisible];
|
||||
[self->tmpWindow makeKeyAndVisible];
|
||||
}
|
||||
[tmpController presentViewController:nav animated:!noAnimate completion:nil];
|
||||
}
|
||||
@ -335,6 +340,10 @@ static CDVWKInAppBrowser* instance = nil;
|
||||
|
||||
- (void)hide:(CDVInvokedUrlCommand*)command
|
||||
{
|
||||
// Set tmpWindow to hidden to make main webview responsive to touch again
|
||||
// https://stackoverflow.com/questions/4544489/how-to-remove-a-uiwindow
|
||||
self->tmpWindow.hidden = YES;
|
||||
|
||||
if (self.inAppBrowserViewController == nil) {
|
||||
NSLog(@"Tried to hide IAB after it was closed.");
|
||||
return;
|
||||
@ -690,6 +699,10 @@ static CDVWKInAppBrowser* instance = nil;
|
||||
// Set navigationDelegate to nil to ensure no callbacks are received from it.
|
||||
self.inAppBrowserViewController.navigationDelegate = nil;
|
||||
self.inAppBrowserViewController = nil;
|
||||
|
||||
// Set tmpWindow to hidden to make main webview responsive to touch again
|
||||
// Based on https://stackoverflow.com/questions/4544489/how-to-remove-a-uiwindow
|
||||
self->tmpWindow.hidden = YES;
|
||||
|
||||
if (IsAtLeastiOSVersion(@"7.0")) {
|
||||
if (_previousStatusBarStyle != -1) {
|
||||
@ -786,7 +799,7 @@ BOOL isExiting = FALSE;
|
||||
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
|
||||
if (@available(iOS 11.0, *)) {
|
||||
[self.webView.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
|
||||
[self.webView.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user