Ответ https://stackoverflow.com/a/19249775/1502287 у меня сработал, но мне пришлось немного изменить его, чтобы он работал с плагином камеры (и, возможно, с другими) и метатегом области просмотра с «height = device- height "(если не задавать высоту, то в моем случае клавиатура будет отображаться поверх вида, скрывая некоторые входные данные по пути).
Каждый раз, когда вы открываете вид камеры и возвращаетесь в свое приложение, будет вызываться метод viewWillAppear, и ваше представление будет уменьшаться на 20 пикселей.
Кроме того, device-height для области просмотра будет включать 20 дополнительных пикселей, делая контент прокручиваемым и на 20 пикселей выше, чем у веб-просмотра.
Вот полное решение проблемы с камерой:
В MainViewController.h:
@interface MainViewController : CDVViewController
@property (atomic) BOOL viewSizeChanged;
@end
В 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];
}
Теперь для проблемы с окном просмотра в вашем прослушивателе событий deviceready добавьте это (используя 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');
}
Вот окно просмотра, которое я использую для других версий:
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0" />
И теперь все работает хорошо.