如果文本字段位于屏幕的下半部分,则文本字段不会聚焦,但如果它位于上半部分,则它可以工作。我在模拟器中的 iOS7 以及已安装应用程序中的设备中发现了这个问题。我正在使用 sencha touch 和 phonegap 但我认为它们不是问题的原因,因为即使是位于屏幕高度一半以下的简单文本字段也会失败。
当我点击文本字段时,操作系统应该在键盘显示之前将文本字段推到上方一点。但这不会发生,而是只显示键盘而没有任何焦点或推动屏幕。我应该如何在 iOS7 中启用它以便我可以解决问题。
谢谢
如果文本字段位于屏幕的下半部分,则文本字段不会聚焦,但如果它位于上半部分,则它可以工作。我在模拟器中的 iOS7 以及已安装应用程序中的设备中发现了这个问题。我正在使用 sencha touch 和 phonegap 但我认为它们不是问题的原因,因为即使是位于屏幕高度一半以下的简单文本字段也会失败。
当我点击文本字段时,操作系统应该在键盘显示之前将文本字段推到上方一点。但这不会发生,而是只显示键盘而没有任何焦点或推动屏幕。我应该如何在 iOS7 中启用它以便我可以解决问题。
谢谢
终于找到问题的原因了。如果您使用的是 UIWebview,那么您应该将 body 标签的最小高度设置为设备的内部高度。例如 iPhone 4S 为 460px 或 iPhone 5 为 520px
内部高度 = 设备高度 - 状态栏高度 = 460px,基本上应该是应用容器的高度。我把这段代码放在我的手机间隙设备就绪功能中,一切都像一个魅力
document.addEventListener("deviceready", function(){
var body = document.getElementsByTagName('body')[0];
body.style.minHeight=window.innerHeight + 'px';
}, false);
这是一个已知的iOS7错误,请尝试
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, target-densityDpi=device-dpi">
对我来说效果很好,也不包括任何 javascript。
在元标记中设置height=device-height
似乎可以解决这个问题。
您可以将 Meta 标签更改为:
请注意,Sencha 正在动态添加元标记,我添加了以下功能:
function init()
{
var ua = navigator.userAgent;
uaindex = ua.indexOf( 'OS ' );
userOSver = ua.substr(uaindex + 3, 3 ).replace( '_', '.' );
userOsve = userOSver.substr(0,1);
if(userOsve == "7")
{
if(screen.height > 481)
var phone_height = "550"
else
var phone_height = "450"
var content="width=device-width, height="+phone_height+", initial-scale=1.0, maximum-scale=1.0,target-densityDpi=device-dpi";
document.getElementsByName('viewport')[0].content = content;
}
}
这在 iOS 中不会自动发生。当 UITextField 成为第一响应者时,键盘将出现,然后由您决定向上移动 textField 或向上滚动整个视图以使其可见。听起来 Sencha/phonegap 为您处理了这个问题,并且在 iOS7 中不再正常工作。如果是这种情况,您需要以老式方式移动它。