cordova-plugin-themeablebrowser icon indicating copy to clipboard operation
cordova-plugin-themeablebrowser copied to clipboard

Webview below 20px under the toobar

Open procom opened this issue 7 years ago • 6 comments

Hello,

With iOS 11, webview below 20px under the toobar (see attachment). With iOS 10, no problem.

screenshot

procom avatar Dec 05 '17 09:12 procom

@procom do you solve this problem ?

jumplee avatar Jan 08 '18 07:01 jumplee

#170 make it

jumplee avatar Jan 08 '18 07:01 jumplee

Yes, it solves this problem.

:)

procom avatar Jan 16 '18 16:01 procom

Hello,

I come back to this topic. Here is a global solution after several tests

- (void) rePositionViews {
    // Webview height is a bug that appear in the plugin for ios >= 11 so we need to keep the previous code that work great for previous versions
    if (@available(iOS 11, *)) {
        
        CGFloat toolbarHeight = [self getFloatFromDict:_browserOptions.toolbar withKey:kThemeableBrowserPropHeight withDefault:TOOLBAR_DEF_HEIGHT];
        CGFloat statusBarOffset = [self getStatusBarOffset];
        CGFloat webviewOffset = _browserOptions.fullscreen ? 0.0 : toolbarHeight + statusBarOffset;
        
        if ([_browserOptions.toolbarposition isEqualToString:kThemeableBrowserToolbarBarPositionTop]) {
            // The webview height calculated did not take the status bar into account. Thus we need to remove status bar height to the webview height.
            [self.webView setFrame:CGRectMake(self.webView.frame.origin.x, webviewOffset, self.webView.frame.size.width, (self.webView.frame.size.height-statusBarOffset))];
            [self.toolbar setFrame:CGRectMake(self.toolbar.frame.origin.x, [self getStatusBarOffset], self.toolbar.frame.size.width, self.toolbar.frame.size.height)];
        }
        // When positionning the iphone to landscape mode, status bar is hidden. The problem is that we set the webview height just before with removing the status bar height. We need to adjust the phenomen by adding the preview status bar height. We had to add manually 20 (pixel) because in landscape mode, the status bar height is equal to 0.
        if (statusBarOffset == 0) {
            [self.webView setFrame:CGRectMake(self.webView.frame.origin.x, webviewOffset, self.webView.frame.size.width, (self.webView.frame.size.height+20))];
        }
        
        CGFloat screenWidth = CGRectGetWidth(self.view.frame);
        NSInteger width = floorf(screenWidth - self.titleOffset * 2.0f);
        if (self.titleLabel) {
            self.titleLabel.frame = CGRectMake(floorf((screenWidth - width) / 2.0f), 0, width, toolbarHeight);
        }
        
        [self layoutButtons];
        
    } else {
        
        CGFloat toolbarHeight = [self getFloatFromDict:_browserOptions.toolbar withKey:kThemeableBrowserPropHeight withDefault:TOOLBAR_DEF_HEIGHT];
        CGFloat webviewOffset = _browserOptions.fullscreen ? 0.0 : toolbarHeight;
        
        if ([_browserOptions.toolbarposition isEqualToString:kThemeableBrowserToolbarBarPositionTop]) {
            [self.webView setFrame:CGRectMake(self.webView.frame.origin.x, webviewOffset, self.webView.frame.size.width, self.webView.frame.size.height)];
            [self.toolbar setFrame:CGRectMake(self.toolbar.frame.origin.x, [self getStatusBarOffset], self.toolbar.frame.size.width, self.toolbar.frame.size.height)];
        }
        
        CGFloat screenWidth = CGRectGetWidth(self.view.frame);
        NSInteger width = floorf(screenWidth - self.titleOffset * 2.0f);
        if (self.titleLabel) {
            self.titleLabel.frame = CGRectMake(floorf((screenWidth - width) / 2.0f), 0, width, toolbarHeight);
        }
        
        [self layoutButtons];
    }
}

procom avatar Feb 15 '18 15:02 procom

How can I use this fix ?

pbijvani avatar Mar 02 '18 22:03 pbijvani

@procom thanks,He solved my problem。

OooOooosss avatar Mar 05 '18 07:03 OooOooosss