当屏幕底部的输入字段具有焦点时,键盘会向上推动我的webview,并且页面的上半部分不再可见.
我想阻止键盘推高webview.
有人有想法吗?
关于这个问题有很多(但不完全是)古老的问题,但由于我找不到任何现代的问题,我想我会再次问,希望得到一个现代的答案。
我正在开发一个业余爱好者响应式网络应用程序,但我在 iOS 上的输入焦点方面遇到了问题。我希望输入滚动到焦点上的 iOS 键盘上方(或不滚动),但无论如何,iOS 都希望将该控件居中。
在附加的 GIF 中,您可以看到我所看到的行为,然后我在末尾滚动以指示焦点事件触发后我希望发生的情况。
我发现这样的事情有效,但我想要更好的东西:以下代码有效,但在 GIF 中看到的滚动和窗口返回到我想要的位置之间有明显的延迟。另外,如果我将setTimeout()时间调整到~400以下,它就不起作用。iOS 在焦点滚动碰撞期间是否有一些阻塞?
element.addEventListener('focus', (e) => { setTimeout(() => { window.scroll(0,0) }, 500) });
Run Code Online (Sandbox Code Playgroud)
更新#1
到目前为止,我尝试过的唯一有效的解决方案是以下内容,感觉相当简陋(其中在和侦听器scrollLock中的其他地方定义):focusblur
document.addEventListener('scroll', (e) => {
if (scrollLock && document.documentElement.scrollTop > 100) {
document.documentElement.scrollTop = 100;
}
});
Run Code Online (Sandbox Code Playgroud)
preventDefault()所有涉及或调用的解决方案window.scroll都没有阻止上图所示的滚动,而是主动监视滚动并迫使其返回到我希望它起作用的位置。然而,希望这不是答案!
我正在处理一个具有固定标题(用于操作按钮)的表单,并且在 iOS(Safari 和 Chrome)中遇到了不同的行为。问题在于,每当键盘打开时,操作系统都会向上推整个 web 视图,隐藏应该始终可见的标题。
尝试了几个解决方案 1、2(JavaScript/jQuery 部分)和其他一些类似的选项。他们都没有正确解决这个问题。我不能使用这里提到的原生/混合支持。
以下是我尝试过的-
默认行为 -视图向上滚动,隐藏标题
滚动覆盖后 -用户界面在每次点击输入/文本区域时跳转,标题有时也会隐藏。
// tried code to override iOS push behaviour
$("body").on("focus", "input, textarea", function(event) {
event.stopPropagation(); // this can be ignored
let winScroll = window.scrollY;
window.scrollTo({
top: winScroll
});
});
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让标题始终可见并固定在顶部,其余的视图可能会滚动,就像在浏览器(不是 iOS)中一样?使用整页视图复制此行为的代码。