iPhone webview 键盘上推布局并保持不变

Posted

技术标签:

【中文标题】iPhone webview 键盘上推布局并保持不变【英文标题】:iPhone webview keyboard push up the layout and leaves it up 【发布时间】:2012-11-03 18:47:39 【问题描述】:

在编辑文本字段时,本机键盘会弹出 webview 并将其保留。就像你离开马桶座时一样。 原生键盘缩回后如何恢复到原始滚动位置? 我有一个可以被抓住的事件。我正在考虑一个丑陋的黑客,每次编辑后重新加载整个 webview。这似乎是唯一的出路。

【问题讨论】:

您将文本字段与马桶座进行比较? :D @Derek : 对于一个真正的巨魔来说,这实际上是一个很好的比喻:) 【参考方案1】:

假设存在一些支持 CSS 选择器的库:

var positionResetHandler = function () 
  var self = ,
      lastY = null;

  self.inputFieldFocusHandler = function () 
    lastY = window.scrollY;
  ;

  self.inputFieldBlurHandler = function () 
    if (lastY) 
      window.scrollTo(0, lastY);
      lastY = null;
    
  ;

  return self;
;

var handler = positionResetHandler();

$("input").bind("focus", handler.inputFieldFocusHandler);
$("input").bind("blur", handler.inputFieldBlurHandler);

在任何输入字段的焦点上,然后记录页面的 y 位置。在任何输入字段模糊时,然后将页面滚动回最后一个已知的 y 位置

【讨论】:

谢谢@sciritai,在修改了几个地方后,我让你的例子工作了。我需要添加括号来返回事件处理程序 positionResetHandler().inputFieldFocusHandler lastY 需要一个 this 关键字/说明符。否则,处理函数中的 lastY 将为 null。我不使用 jquery,这就是我使用 addEventListener 的原因。 @DevNull - document.querySelectorAll 是一个原生函数,基本上是 jQuery 选择器。 我根据您的反馈更新了我的工作答案。 'this' 实际上是不需要的。 lastY 将包含在分别解释 inputFieldFocusHandler 和 inputFieldBlurHandler 时形成的闭包中。我使用了模块模式而不是原型继承。

以上是关于iPhone webview 键盘上推布局并保持不变的主要内容,如果未能解决你的问题,请参考以下文章

软键盘出现时如何保持Android webview中的固定页脚不覆盖输入字段?

android 透明状态栏方法及其适配键盘上推

苹果手机下滑栏改成上推

android 透明状态栏方法及其适配键盘上推

Android webview中隐藏在键盘下方的文本框

在 WebView 中点击表单字段不显示软键盘