Возможно ли на iPad OS определить, находится ли клавиатура в плавающем режиме? - PullRequest
4 голосов
/ 23 января 2020

Мы сталкиваемся с указанной c ошибкой на iOS/iPadOS, которая, кажется, срабатывает, когда iPad показывает плавающую (iphone -подобную) клавиатуру на экране (вместо привязанной)

Нашей проблемой является c для React Native и компонента KeyboardAvoidingView. Когда компонент рендерится, а клавиатура плавает, KeyboardAvoidingView полностью неверно рассчитал высоту, требуемую для клавиатуры, и вместо этого скрывает около 95% высоты экрана.

Сам KeyboardAvoidingView не выглядит чтобы можно было определить, включена ли плавающая клавиатура.

Есть ли конкретный API, к которому можно подключиться, чтобы обнаружить этот режим клавиатуры, чтобы мы могли отключить KeyboardAvoidingView для него?

События клавиатуры (keyboardWillShow, keyboardDidShow, et c), по-видимому, не возвращают никаких специфических c подсказок.

1 Ответ

2 голосов
/ 27 января 2020

Нет перечисления / индикатора такого режима (по крайней мере, на данный момент), но с информацией о кадре клавиатуры

public class let keyboardFrameBeginUserInfoKey: String // NSValue of CGRect
public class let keyboardFrameEndUserInfoKey: String // NSValue of CGRect

в соответствующих уведомлениях клавиатуры

public class let keyboardWillShowNotification: NSNotification.Name

public class let keyboardDidShowNotification: NSNotification.Name

public class let keyboardWillHideNotification: NSNotification.Name

public class let keyboardDidHideNotification: NSNotification.Name

public class let keyboardWillChangeFrameNotification: NSNotification.Name

public class let keyboardDidChangeFrameNotification: NSNotification.Name

относительно границ экрана

UIScreen.main.bounds

можно определить, находится ли рамка клавиатуры у края экрана внизу или плавающая.

Схематически это будет как

keyboardAttached = NSMaxX(screenBounds) == NSMaxX(keyboardFrame) &&
    NSMaxY(screenBounds) == NSMaxY(keyboardFrame) && 
    NSWidth(screenBounds) == NSWidth(keyboardFrame)
...