คำตอบhttps://stackoverflow.com/a/19249775/1502287ใช้ได้สำหรับฉัน แต่ฉันต้องเปลี่ยนเล็กน้อยเพื่อให้ใช้งานได้กับปลั๊กอินกล้อง (และอื่น ๆ ที่อาจเกิดขึ้น) และเมตาแท็กวิวพอร์ตที่มี "height = device- height "(การไม่ตั้งค่าส่วนความสูงจะทำให้แป้นพิมพ์ปรากฏเหนือมุมมองในกรณีของฉันโดยซ่อนอินพุตบางส่วนระหว่างทาง)
ทุกครั้งที่คุณเปิดมุมมองกล้องและกลับไปที่แอปของคุณเมธอด viewWillAppear จะถูกเรียกและมุมมองของคุณจะลดลง 20px
นอกจากนี้ความสูงของอุปกรณ์สำหรับวิวพอร์ตจะรวมพิกเซลพิเศษ 20 พิกเซลการแสดงผลเนื้อหาที่เลื่อนได้และสูงกว่ามุมมองเว็บ 20px
นี่คือวิธีแก้ปัญหาที่สมบูรณ์สำหรับปัญหากล้อง:
ใน 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];
}
ตอนนี้สำหรับปัญหาวิวพอร์ตในอุปกรณ์ของคุณพร้อมฟังเหตุการณ์ให้เพิ่มสิ่งนี้ (โดยใช้ 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" />
และทั้งหมดทำงานได้ดีในขณะนี้