Я борюсь с этой проблемой уже более недели и буду очень благодарен за любую помощь, которую я могу получить. Я объясню вопрос, насколько я понимаю, но, пожалуйста, исправьте, если я скажу что-нибудь неправильное.
В iOS 7.0.x, когда клавиатура стала отображаться, веб-просмотр был изменен таким образом, что область, занятая клавиатурой, не считалась частью размера окна видового экрана. До 7.0 плагин Cordova Keyboard обрабатывал это изменение размера веб-страницы. Так как 7.0 изначально обработали клавиатуру раскрыть желаемым образом, опция Keyboard shrinkView
для файла config.xml
стала "No-op" по сравнению с этой фиксацией:
https://github.com/apache/cordova-plugins/commit/20215013bf91b659b73d5f428ae91dd58be1273a
Однако в 7.1 область, занимаемая клавиатурой, появляется поверх веб-представления. Это имеет болезненный побочный эффект. Предположим, вы хотите добавить <div>
к телу с областью textarea (например, оставить комментарий или ответ чата), т.е.
<body>
<div id="app">...</div>
<div id="reply">
<textarea></textarea>
</div>
</body>
пример CSS:
body {
position: fixed;
top: 0;
bottom: 0;
right: 0;
left: 0;
overflow: hidden;
}
#reply {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
Всякий раз, когда вы фокусируете или вводите текст в текстовое поле, веб-просмотр будет перенастроить поле ввода. Поскольку веб-представление по-прежнему учитывает всю высоту экрана, div не будет оставаться фиксированным на дне и, таким образом, разбивает макет.
Я пробовал следующие вещи:
-
Futzing с CSS для тела и фиксированным div. Позиция фиксированная/абсолютная не имеет значения. Установка явной высоты для тела ничего не делает.
-
Все возможные комбинации параметров мета-просмотра. Это то, что я сейчас использую:
<meta name="viewport" content="user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1, width=device-width, height=device-height, minimal-ui" />
-
Разоружение "No-op" в плагине клавиатуры cordova. Это все еще нарушает компоновку, как в iOS 7.0.x.
-
Наличие прослушивателей событий JS в событиях
input
иfocus
, чтобы продолжить вычисление нижнего смещения, чтобы сохранить div внизу. Это очень скачкообразно, потому что он борется с поведением собственного веб-представления центрирования поля ввода. -
Изменение метатега для установки явной высоты после показа/скрытия клавиатуры.
Я использую Cordova 3.4.0-0.1.3
Кто-нибудь еще испытал эту проблему? Любые решения или идеи?