Jawaban https://stackoverflow.com/a/19249775/1502287 berfungsi untuk saya, tetapi saya harus mengubahnya sedikit agar berfungsi dengan plugin kamera (dan kemungkinan lainnya) dan tag meta viewport dengan "height = device- height "(tidak menyetel bagian tinggi akan menyebabkan keyboard muncul di atas tampilan dalam kasus saya, menyembunyikan beberapa input di sepanjang jalan).
Setiap kali Anda membuka tampilan kamera dan kembali ke aplikasi Anda, metode viewWillAppear akan dipanggil, dan tampilan Anda akan menyusut sebesar 20px.
Selain itu, tinggi perangkat untuk viewport akan menyertakan 20 piksel ekstra, membuat konten dapat digulir dan 20 piksel lebih tinggi dari tampilan web.
Inilah solusi lengkap untuk masalah kamera:
Di MainViewController.h:
@interface MainViewController : CDVViewController
@property (atomic) BOOL viewSizeChanged;
@end
Di 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];
}
Sekarang untuk masalah viewport, di pendengar acara perangkat Anda, tambahkan ini (menggunakan 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');
}
Ini adalah viewport yang saya gunakan untuk versi lain:
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0" />
Dan semuanya bekerja dengan baik sekarang.