Odpowiedź https://stackoverflow.com/a/19249775/1502287 działała dla mnie, ale musiałem to trochę zmienić, aby działała z wtyczką aparatu (i potencjalnie innymi) i metatagiem widoku z „height = device- wysokość ”(brak ustawienia części wysokości spowodowałoby pojawienie się klawiatury nad widokiem w moim przypadku, ukrywając niektóre wejścia po drodze).
Za każdym razem, gdy otwierasz widok kamery i wracasz do aplikacji, wywoływana jest metoda viewWillAppear, a widok zmniejsza się o 20 pikseli.
Ponadto wysokość urządzenia dla widocznego obszaru obejmowałaby dodatkowe 20 pikseli, renderujące zawartość przewijalną i o 20 pikseli wyższe niż widok sieciowy.
Oto kompletne rozwiązanie problemu z aparatem:
W MainViewController.h:
@interface MainViewController : CDVViewController
@property (atomic) BOOL viewSizeChanged;
@end
W MainViewController.m:
@implementation MainViewController
@synthesize viewSizeChanged;
[...]
- (id)init
{
self = [super init];
if (self) {
self.viewSizeChanged = NO;
}
return self;
}
[...]
- (void)viewWillAppear:(BOOL)animated
{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7 && !self.viewSizeChanged) {
CGRect viewBounds = [self.webView bounds];
viewBounds.origin.y = 20;
viewBounds.size.height = viewBounds.size.height - 20;
self.webView.frame = viewBounds;
self.viewSizeChanged = YES;
}
[super viewWillAppear:animated];
}
Teraz, jeśli chodzi o problem z widocznym obszarem, w odbiorniku zdarzeń urządzenia gotowego do dodania (używając jQuery):
if (window.device && parseFloat(window.device.version) >= 7) {
$(window).on('orientationchange', function () {
var orientation = parseInt(window.orientation, 10);
var height = 300;
var width = 320;
if (orientation !== -90 && orientation !== 90 ) {
height = document.documentElement.clientHeight - 20;
} else {
width = document.documentElement.clientHeight + 20;
}
document.querySelector('meta[name=viewport]')
.setAttribute('content',
'width=' + width + ',' +
'height=' + height + ',' +
'initial-scale=1.0,maximum-scale=1.0,user-scalable=no');
})
.trigger('orientationchange');
}
Oto rzutnia, którego używam w innych wersjach:
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0" />
I teraz wszystko działa dobrze.