虽然塞缪尔的回应应该解决问题,但它会产生其他副作用。例如,在 Phonegap 3.3 中,将height=device-height添加到视口,您将在每个屏幕中滚动(即使页面上的元素不够大而无法填满屏幕)。在我们的案例中,在这里找到的唯一解决方案是将通知处理程序添加到 Phonegap 上的打开键盘,它调用 javascript 函数,然后在此函数上隐藏固定页脚,除了在焦点/模糊功能中再次隐藏/显示页脚. 附加了一个使用 jquery mobile 的示例,但您可以更新它以使用不同的框架:
在 JavaScript 上:
$(document).on('focus','input, select, textarea',function() {
if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
if($(this).attr('readonly')===undefined){
$("[data-role=footer]").hide();
}
}
});
$(document).on('blur','input, select, textarea',function(){
if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
if($(this).attr('readonly')===undefined){
$("[data-role=footer]").show();
}
}
setTimeout(function() {
window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
}, 0);
});
function hideFooter(){
if( device.platform=== 'iOS' && parseInt(device.version.substring(0,1)) >= 7){
if($(this).attr('readonly')===undefined) {
$("[data-role=footer]").hide();
}
}
}
在 phonegap MainViewController.m 中:
- (id)init
{
self = [super init];
if (self) {
// Uncomment to override the CDVCommandDelegateImpl used
// _commandDelegate = [[MainCommandDelegate alloc] initWithViewController:self];
// Uncomment to override the CDVCommandQueue used
// _commandQueue = [[MainCommandQueue alloc] initWithViewController:self];
}
//fix for ios7 footer is scrolled up when the keyboard popsup.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
return self;
}
-(void)keyboardWillShow:(NSNotification*)notification{
if (IsAtLeastiOSVersion(@"7.0")){
[self.webView stringByEvaluatingJavaScriptFromString:@"hideFooter()"];
}
}