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

Fixed the bug with wrong webviewOffset (issue reported for iPhone X and other iOS devices)

Open michal-th opened this issue 7 years ago • 11 comments

The offset should be calculated as height of the toolbar PLUS the height of the status bar. Prevents the negative offset of webview (hiding behind the toolbar).

michal-th avatar Dec 17 '17 12:12 michal-th

@michal-th great! solve my problem!

jumplee avatar Jan 08 '18 07:01 jumplee

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? Its still not on master branch.

pbijvani avatar Mar 02 '18 22:03 pbijvani

Any updates on when this will be available in a release?

torgnywalin avatar Apr 23 '18 13:04 torgnywalin

some one can merge it please?

hiepxanh avatar May 29 '18 04:05 hiepxanh

@radu-cigmaian can you merge it please?

hiepxanh avatar May 29 '18 04:05 hiepxanh

Is there any way we can get it merged?

Manny91 avatar Sep 28 '18 15:09 Manny91

I merged this into my own fork, for those who are interested. See https://github.com/initialxy/cordova-plugin-themeablebrowser/issues/193 For details

grexican avatar Feb 12 '19 15:02 grexican

Merge!!!

carlesferreiro avatar Apr 18 '19 06:04 carlesferreiro

Any updates?

jeanpfs avatar Sep 30 '19 16:09 jeanpfs

It's in my branch. I think there's still a bug with one of the other branches I merged. I no longer see the standard iphone header when using the embedded browser. I think I know the source branch that caused it. Nothing I can do about it currently. I don't have my iOS dev environment set up for it. So if you use my branch, take that part into consideration.

grexican avatar Sep 30 '19 17:09 grexican