उत्तर https://stackoverflow.com/a/19249775/1502287 ने मेरे लिए काम किया, लेकिन मुझे इसे कैमरा प्लगइन (और संभवतः अन्य) के साथ काम करने के लिए इसे थोड़ा बदलना पड़ा और एक व्यूपोर्ट मेटा टैग के साथ "ऊँचाई = डिवाइस- ऊँचाई "(ऊँचाई वाले भाग को सेट नहीं करने से कीबोर्ड मेरे मामले में दृश्य पर प्रकट होगा, रास्ते में कुछ इनपुट छिपाता है)।
हर बार जब आप कैमरा दृश्य खोलेंगे और अपने ऐप पर वापस जाएंगे, तो viewWillAppear पद्धति को कॉल किया जाएगा, और आपका दृश्य 20px तक सिकुड़ जाएगा।
इसके अलावा, व्यूपोर्ट के लिए डिवाइस-ऊंचाई में 20 अतिरिक्त px शामिल होंगे, जो स्क्रॉल करने योग्य सामग्री प्रदान करते हैं और वेब से 20 गुना अधिक है।
यहाँ कैमरा समस्या के लिए पूर्ण समाधान है:
MainViewController.h में:
@interface MainViewController : CDVViewController
@property (atomic) BOOL viewSizeChanged;
@end
MainViewController.m में:
@implementation MainViewController
@synthesize viewSizeChanged;
[...]
- (id)init
{
self = [super init];
if (self) {
// On init, size has not yet been changed
self.viewSizeChanged = NO;
// Uncomment to override the CDVCommandDelegateImpl used
// _commandDelegate = [[MainCommandDelegate alloc] initWithViewController:self];
// Uncomment to override the CDVCommandQueue used
// _commandQueue = [[MainCommandQueue alloc] initWithViewController:self];
}
return self;
}
[...]
- (void)viewWillAppear:(BOOL)animated
{
// View defaults to full size. If you want to customize the view's size, or its subviews (e.g. webView),
// you can do so here.
// Lower screen 20px on ios 7 if not already done
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];
}
अब व्यूपोर्ट प्रॉब्लम के लिए, अपने डेविसराय इवेंट श्रोता में, इसे जोड़ें (jQuery का उपयोग करके):
if (window.device && parseFloat(window.device.version) >= 7) {
$(window).on('orientationchange', function () {
var orientation = parseInt(window.orientation, 10);
// We now the width of the device is 320px for all iphones
// Default height for landscape (remove the 20px statusbar)
var height = 300;
// Default width for portrait
var width = 320;
if (orientation !== -90 && orientation !== 90 ) {
// Portrait height is that of the document minus the 20px of
// the statusbar
height = document.documentElement.clientHeight - 20;
} else {
// This one I found experimenting. It seems the clientHeight
// property is wrongly set (or I misunderstood how it was
// supposed to work).
// Dunno if it's specific to my setup.
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" />
और सभी अब अच्छी तरह से काम करता है।