【问题标题】:Cannot type in emulator search bar无法在模拟器搜索栏中输入
【发布时间】:2019-10-10 14:04:00
【问题描述】:

当我使用 iOS 设备进行调试时,我可以在顶部的搜索栏中键入并重新键入(我在我的应用程序中运行 webkit 浏览器)。如果我在模拟器中执行此操作,我可以在搜索栏为空时输入它,但是在我搜索某些内容并且它填充了一个 URL 之后,我无法重新输入它,因为搜索栏在我尝试时来回移动选择它。

它在实际的 iOS 设备上运行良好,但在模拟器上它会切换。

它使用基本的 webkit 库:https://en.wikipedia.org/wiki/WebKit

我希望它能够像在 iOS 设备上一样工作,如果我切换软件键盘,它可以,但没有它,它不会。

【问题讨论】:

    标签: ios emulation


    【解决方案1】:

    来自修复它的工程师:

    其实很奇怪。我不确定这个 PR 是否依赖于无证行为,但即使发生变化它也应该是安全的。这是正在发生的事情。

    iOS 应该在要显示键盘时触发 UIResponder.keyboardWillShowNotification,在要隐藏键盘时触发 UIResponder.keyboardWillHideNotification。对于这两种通知,此代码都会检索键盘的框架:

    让 beginRect = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as?NSValue)?.cgRectValue 让 endRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as?NSValue)?.cgRectValue 奇怪的是,在 iOS 模拟器中,如果软件键盘被关闭(因此模拟外部键盘),则 UIResponder.keyboardWillShowNotification 永远不会被触发(这是可以理解的)并且 UIResponder.keyboardWillHideNotification 在文本框成为第一响应者时都会被触发(即获得焦点)和当文本框辞职第一响应者(即失去焦点)。我想原因是这些通知是针对软件键盘触发的,并且在这两种情况下键盘都是隐藏的。根据经验,在 iOS 12(和 iPhone X)中:

    A.当文本框成为第一响应者时,beginRect.size.height=0 和 endRect.size.height ~54。两个 origin.y 都保持在 ~812(屏幕外)。 B. 当文本框退出第一响应者时,beginRect.size.height ~54 and endRect.size.height=0。两个 origin.y 都保持在 ~812(屏幕外)。

    解决方法是测试 A 并在处理 UIResponder.keyboardWillHideNotification 时忽略它

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多