Не удается набрать в строке поиска эмулятора - PullRequest
1 голос
/ 24 мая 2019

Когда я использую устройство iOS для отладки, я могу набирать текст и вводить его заново в строку поиска вверху (в моем приложении запущен браузер с веб-наборами).Если я делаю это в эмуляторе, я могу набрать его, когда строка поиска пуста, но после того, как я что-то ищу и заполнен URL-адресом, я не могу ввести его повторно, так как панель поиска перемещается вперед и назад, когда я пытаюсьвыберите его.

Он отлично работает на реальном устройстве iOS, но на эмуляторе он переключается.

Используется базовая библиотека webkit: https://en.wikipedia.org/wiki/WebKit

Я ожидаю, что она будет работать так же, как на устройстве iOS, и работает, если я переключаю программную клавиатуру, но без нее это не так.

Search bar is inaccessible here

1 Ответ

0 голосов
/ 20 июня 2019

От инженера, который исправил это:

Это на самом деле странно. Я не уверен, полагается ли этот пиар на недокументированное поведение, но это должно быть безопасно, даже если это изменится. Вот что происходит.

iOS должна запускать UIResponder.keyboardWillShowNotification, когда клавиатура будет отображаться, и UIResponder.keyboardWillHideNotification, когда клавиатура будет скрыта. Для обоих уведомлений этот код получает кадр клавиатуры:

let beginRect = (tification.userInfo? [UIResponder.keyboardFrameBeginUserInfoKey] как? NSValue) ?. cgRectValue let endRect = (Notification.userInfo? [UIResponder.keyboardFrameEndUserInfoKey] как? 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

...