You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Shazron Abdullah (JIRA)" <ji...@apache.org> on 2014/03/13 23:23:47 UTC

[jira] [Updated] (CB-5893) Using StatusBar with StatusBarOverlaysWebView = false on iPad creates only 20px wide webview frame

     [ https://issues.apache.org/jira/browse/CB-5893?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Shazron Abdullah updated CB-5893:
---------------------------------

    Component/s:     (was: Plugins)
                     (was: iOS)
                 Plugin Statusbar

> Using StatusBar with StatusBarOverlaysWebView = false on iPad creates only 20px wide webview frame
> --------------------------------------------------------------------------------------------------
>
>                 Key: CB-5893
>                 URL: https://issues.apache.org/jira/browse/CB-5893
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin Statusbar
>    Affects Versions: 3.3.0
>         Environment: iOS 7, iPad (2, iPad Mini (retina), iPad Air)
>            Reporter: Hans-Gunther Schmidt
>              Labels: statusbar-plugin
>
> When using the statusbar plugin (org.apache.cordova.statusbar) in a Cordova (and PhoneGap) app built for iOS we experience an issue on iPads: when opening the app on an iPad in *Landscape* (left, right) mode, the whole webview seems to only be contained in an 20px by <device-width> viewable frame (basically we can only see parts of our header bar).
> How to reproduce:
> {code}
> $ npm install -g cordova
> $ cordova create hello com.example.hello Hello
> $ cd hello
> $ cordova platform add ios
> $ cordova plugin add org.apache.cordova.statusbar
> $ cordova build ios
> {code}
> Then create an iOS build as given below:
> - open {{platforms/ios/Hello.xcodeproj/}} in Xcode
> - adapt {{StatusBarOverlaysWebView}} in {{config.xml}}:
> {code}
> <preference name="StatusBarOverlaysWebView" value="true" />
> {code}
> to
> {code}
> <preference name="StatusBarOverlaysWebView" value="false" />
> {code}
> - set target device to _iPhone_ (= not _Universal_)
> - set target version _7.0_
> - set device orientation to _Portrait_ (= not _Upside Down_, _Landscape left | right_)
> - physically turn your connected iPad into either landscape left/right position
> - deploy to your iPad
> Happens to us with iPad 2, iPad Air and iPad Mini (retina) with Cordova *3.3.1-0.1.2*. We also see this issue when using PhoneGap *3.1.0-0.15.0* and *3.3.0-0.19.1*.
> From poking around and adding log messages to {{setStatusBarOverlaysWebView}} we do see that the calculated values might be incorrect.
> {code:title=|borderStyle=solid}
> - (void) setStatusBarOverlaysWebView:(BOOL)statusBarOverlaysWebView
> {
>     // we only care about the latest iOS version or a change in setting
>     if (!IsAtLeastiOSVersion(@"7.0") || statusBarOverlaysWebView == _statusBarOverlaysWebView) {
>         return;
>     }
>     CGRect bounds = [[UIScreen mainScreen] bounds];
>     
>     if (statusBarOverlaysWebView) {
>         
>         [_statusBarBackgroundView removeFromSuperview];
>         self.webView.frame = bounds;
>     } else {
>         CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
>         [self initializeStatusBarBackgroundView];
>         CGRect frame = self.webView.frame;
>         if (UIDeviceOrientationIsLandscape(self.viewController.interfaceOrientation)) {
>             frame.origin.y = statusBarFrame.size.width;
>             frame.size.height -= statusBarFrame.size.width;
>         } else {
>             frame.origin.y = statusBarFrame.size.height;
>             frame.size.height -= statusBarFrame.size.height;
>         }
>         
>         NSLog(@"frame  | %f | %f | %f | %f |", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
>         self.webView.frame = frame;
>         NSLog(@"self.webview.frame  | %f | %f | %f | %f |", self.webView.frame.origin.x, self.webView.frame.origin.y, self.webView.frame.size.width, self.webView.frame.size.height);
>         [self.webView.superview addSubview:_statusBarBackgroundView];
>     }
>     
>     _statusBarOverlaysWebView = statusBarOverlaysWebView;
> }
> {code}
> The NSLog statements will print out:
> {code:title=log output|borderStyle=solid}
> [...]
> 2014-01-24 18:17:02.780 HelloCord[7877:60b] frame  | 0.000000 | 480.000000 | 320.000000 | -20.000000 |
> 2014-01-24 18:17:02.783 HelloCord[7877:60b] self.webview.frame  | 0.000000 | 460.000000 | 320.000000 | 20.000000 |
> [...]
> {code}
> This would (and does) translate into a webview frame (when holding the iPad back in Portrait mode again):
> - x = 0 (OK)
> - y = 460px (all the way down ... NOT OK)
> - width = 320px (from left to right screen border ... OK)
> - height = 20px (NOT OK)



--
This message was sent by Atlassian JIRA
(v6.2#6252)