4

如果文本字段位于屏幕的下半部分,则文本字段不会聚焦,但如果它位于上半部分,则它可以工作。我在模拟器中的 iOS7 以及已安装应用程序中的设备中发现了这个问题。我正在使用 sencha touch 和 phonegap 但我认为它们不是问题的原因,因为即使是位于屏幕高度一半以下的简单文本字段也会失败。

当我点击文本字段时,操作系统应该在键盘显示之前将文本字段推到上方一点。但这不会发生,而是只显示键盘而没有任何焦点或推动屏幕。我应该如何在 iOS7 中启用它以便我可以解决问题。

谢谢

4

4 回答 4

10

终于找到问题的原因了。如果您使用的是 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);
于 2013-10-28T06:59:43.357 回答
5

这是一个已知的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似乎可以解决这个问题。

于 2014-01-29T14:11:01.143 回答
1

您可以将 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;
    }
}
于 2013-11-27T11:05:17.413 回答
1

这在 iOS 中不会自动发生。当 UITextField 成为第一响应者时,键盘将出现,然后由您决定向上移动 textField 或向上滚动整个视图以使其可见。听起来 Sencha/phonegap 为您处理了这个问题,并且在 iOS7 中不再正常工作。如果是这种情况,您需要以老式方式移动它。

存在键盘时向上移动文本字段

于 2013-10-23T14:36:20.887 回答