Replies: 4 comments 12 replies
-
Test Case 1. В интернете описывают лайфхаки, как предотвратить автоматическое перемещение visualViewport: перед фокусировкой надо на долю секунды перенести поле ввода очень высоко (transform) и вернуть обратно. Кстати, на этом приёме работает мессенджер внутри VK Знакомств (обратите внимание, как интерфейс вписывается под клавиатуру, при этом visualViewport не уезжает, шапка продолжает быть видна) |
Beta Was this translation helpful? Give feedback.
-
Как раз для таких целей делали библиотеку https://github.com/VKCOM/IOSDevice |
Beta Was this translation helpful? Give feedback.
-
Пока не совсем понял как это должно работать 🤔 |
Beta Was this translation helpful? Give feedback.
-
А что если мы будем скрывать клавиатуру если пользователь "увёл" фокус с поля? Например, как в системе iOS или в Yandex.Go |
Beta Was this translation helpful? Give feedback.
-
Вводная
Важная iOS особенность, которую нужно учитывать в библиотеке: при подъеме клавиатуры вьюпорт не уменьшается, а уезжает за пределы экрана. Как следствие, при поднятой клавиатуре образуется дополнительный скролл, который позволяет проскроллить так называемый visualViewport.
Описание проблемы
Неудобно работать с клавиатурой в ModalPage на iOS, если внутри ModalPage есть много скролящегося контента. Конфликтуют кастомный скролл внутри ModalPage и скролл iOS visualViewport. Высокий шанс свернуть ModalPage при попытке скролльнуть вверх.
Окружение
Любой iOS. Любой VKUI.
Воспроизводится в мини-приложениях как в нативном клиенте, так и в браузере (Chrome, Safari).
Пример с кодом
https://codesandbox.io/s/zealous-currying-lgcyss?file=/src/index.js
Видео
Демо
IMG_6065.MP4
2-3 сек: Делаем скролл вниз. Не удается доскролить до низа внутреннего скролла ModalPage. Так как часть вьюпорта под клавиатурой.
3-4 сек: Необходимо сделать паузу, чтобы взять управление над скроллом visualViewport (Проблема 1. Неудобно)
5-7 сек: Делаем скролл вверх. Не удается доскролить до верха скролла ModalPage. Так как часть вьюпорта выше физического экрана.
8-9 сек: Необходимо сделать паузу, чтобы взять управление над скроллом visualViewport (Проблема 2. Случайно закрываем модалку, не получаем желаемый результат. Решение Мастхэв.)
Предлагаемое решение
Альтернативное простое решение
Запретить при поднятой клавиатуре закрывать модалку жестом вниз. Проблемы с необходимостью делать паузу останутся, но хотя бы решится мастхэв проблема 2, предотвратим случайное сворачивание.
Идея пересекается с запросом https://github.com/VKCOM/VKUI/issues/3628.
Test Cases
Beta Was this translation helpful? Give feedback.
All reactions