Подтвердить что ты не робот

Запретить прокрутку на дисплее клавиатуры iOS 6

У меня запуталась странная проблема. В настоящее время я создаю мобильное веб-приложение, использующее HTML5 и CSS3 только для iOS 6.

Однако, когда элемент input получает фокус и отображается мягкая клавиатура, окно прокручивается так, что вход не скрывается клавиатурой (хотя он не будет в любом случае).

Я прочитал о SO и через Google, что можно добавить следующее, чтобы предотвратить это поведение (при просмотре этого внутри UIWebView):

input.onfocus = function () {
    window.scrollTo(0, 0);
    document.body.scrollTop = 0;
}

Однако, похоже, что в iOS 6, хотя сначала окно прокручивается до 0,0, оно снова прокручивается, чтобы центрировать сфокусированный элемент. Кто-нибудь еще сталкивается с этим и знает ли они об исправлении для iOS 6?

4b9b3361

Ответ 1

Я тоже попал в эту проблему. Следующие действия на iOS 6:

<input onfocus="this.style.webkitTransform = 'translate3d(0px,-10000px,0)'; webkitRequestAnimationFrame(function() { this.style.webkitTransform = ''; }.bind(this))"/>

В принципе, поскольку Safari решает, будет ли прокрутка страницы на основе вертикальной позиции текстового поля, вы можете обмануть ее, мгновенно перемещая элемент выше верхней части экрана, а затем снова после завершения фокусного события.

Недостатком является то, что элемент исчезает на долю секунды. Если вы хотите обойти это, вы можете динамически вставить клон исходного элемента в исходное местоположение и затем удалить его в обратном вызове webkitRequestAnimationFrame.

Ответ 2

Может ли это быть проблемой времени?

Попробуйте обернуть его в тайм-аут, чтобы убедиться, что он запускается после запуска собственных событий.

input.onfocus = function () {
    setTimeout(function() {
        window.scrollTo(0, 0);
        document.body.scrollTop = 0;
    }, 50)
}

Ответ 3

Update: Хотя принятое решение работало с UIWebView, с тех пор появился более быстрый WKWebView. И если вы используете последнюю версию Cordova для iOS, вы можете включить WKWebView для устройств iOS 9, но по умолчанию просмотр по-прежнему будет прокручиваться вверх. Чтобы исправить это, просто добавьте плагин для клавиатуры (больше не нужны хаки CSS):

Добавить плагины Cordova в терминале:

cordova platform add [email protected]
cordova plugin add cordova-plugin-wkwebview-engine --save
cordova plugin add cordova-plugin-keyboard --save

Задайте предпочтение iOS для использования WKWebView в Cordova config.xml

<platform name="ios">
    <feature name="CDVWKWebViewEngine">
        <param name="ios-package" value="CDVWKWebViewEngine" />
    </feature>
    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
</platform>

Затем вставьте предпочтения клавиатуры iOS в Кордове config.xml

    <preference name="KeyboardShrinksView" value="true" />
    <preference name="DisallowOverscroll" value="true" />

Более подробная информация о настройках iOS приведена в документах Cordova: https://cordova.apache.org/docs/en/5.4.0/guide/platforms/ios/config.html

Ответ 4

Установите стиль input font-size 1em или выше.

<input type=text style="font-size:1.2em">