gpt4 book ai didi

Cordova IOS 12 Wkwebview 正文滚动问题

转载 作者:行者123 更新时间:2023-12-05 07:28:21 27 4
gpt4 key购买 nike

我有一个 Cordova 应用程序(PGB cli-6.5.0、Cordova iOS 4.3.1、wkwebview)在 iOS 12.1 上表现出奇怪的行为。该代码在 iOS 12 之前已经运行多年。该应用程序允许在应用程序中实现各种数字输入样式,但也包括标准键盘。在 iOS 12 中,输入弹出 div 或标准键盘出现并正常显示,但触摸未在正确位置注册。它们垂直偏移(记住一切在视觉上都是正常的)。即使使用标准键盘也是如此。更改设备方向可以解决该实例的问题,但下次选择输入时问题仍然存在。在 iOS 12 Safari 或 Chrome 上使用该应用程序的网络版本不会发生这种情况。在使用 Cordova native 版本的 Android 上不会发生这种情况。

使用调试器,我发现在标准键盘被键盘覆盖的输入关闭后,body 元素有一个非零的 scrollTop。这永远不应该发生。我找到的修复方法是在 onblur 事件处理程序中设置 body.scrollTop = 0。

我发现即使是不显示标准键盘的自定义输入也是如此。设置 body.scrollTop = 0 会在选择了标准键盘(不应显示)覆盖的输入时导致正文出现明显的“弹跳”。

我试过将 KeyboardDisplayRequiresUserAction 设置为 false 并使用更新的 PGB 版本 (cli-7.1.0),没有任何变化。在事件处理程序中设置调试器断点似乎表明即使调用了 preventDefault() 键盘也会显示,它只是在呈现之前再次消失。

通过将输入设置为只读,我让键盘暂时停止出现。这在 iPad 上有效,但在 iPhone 上出现一个选项卡导航器而不是键盘(本质上只是标准键盘标题)。我无法让它在 iPhone 上停止。每当我不使用标准键盘时,我终于改为使用跨度而不是输入。无论如何,这可能是最好的。

我的初步结论是iOS 12 wkwebview存在三个bug:

  • preventDefault() 并不能完全阻止键盘显示和滚动正文。它似乎只是在渲染之前显示之后将其删除。
  • 类似地,在输入元素上设置 readOnly 并不能完全阻止键盘显示。
  • 每当 wkwebview 在选择将被键盘覆盖的输入后显示键盘时,它会滚动正文以保持输入可见,但在关闭时无法恢复 scrollTop,即使显示看起来好像已恢复。这会将所有触摸事件替换为滚动量。如果您触摸移位的按钮位置,您甚至可以看到手指下的点击动画。另请记住,更改设备方向会恢复正确的滚动。

我看不出 Cordova 或我的 JS 如何导致这种情况发生。

有没有其他人注意到这一点?

最佳答案

已解决:

首先在您的项目中搜索:

<preference name="DisallowOverscroll" value="false" />

并设置为

<preference name="DisallowOverscroll" value="true" />

然后将其添加到您的 css 正文中:

position: fixed;
overflow-y: hidden;

注意:

  • 我正在运行 cordova v.9.0.1 和 iOs 13.6.1
  • 我注意到我的 cordova 项目有 2 个 config.xml(我不知道为什么)无论如何你必须修改的那个放在 platforms/ios/<your_app>/config.xml

关于Cordova IOS 12 Wkwebview 正文滚动问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53401141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com