无法在模拟器搜索栏中输入

时间:2019-05-24 01:09:50

标签: ios emulation

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

它在实际的iOS设备上可以正常运行,但在模拟器上会切换。

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

我希望它可以像在iOS设备上那样工作,并且如果我切换软件键盘也可以,但是如果没有它,它就不会起作用。

Search bar is inaccessible here

1 个答案:

答案 0 :(得分:0)

来自修复它的工程师:

这实际上很奇怪。我不确定此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和endRect.size.height = 0。两者origin.y都保持在〜812(在屏幕外)。

修复方法是测试A并在处理UIResponder.keyboardWillHideNotification时将其忽略