Элементы ввода iOS 7 перемещают элементы с фиксированным положением

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

Теперь, когда появляется сияющая белая клавиатура iOS 7, все нижние фиксированные элементы на веб-странице (например, кнопки подтверждения) прокручиваются вверх, как будто «верх» виртуальной клавиатуры — это новая нижняя часть моего UIWebView. Это существенно отличается от iOS6.x.

Есть ли какой-нибудь волшебный трюк, чтобы поведение виртуальной клавиатуры работало, как раньше, без внедрения JS/CSS в webView?


person Francesco    schedule 24.09.2013    source источник


Ответы (4)


Это устранило проблему для моего приложения Cordova. Не уверен, что это относится к вам, но на всякий случай.

Проверьте свои метатеги html на что-то вроде этого:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">

Замените его на это:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, target-densityDpi=device-dpi" />
person Opossum    schedule 25.09.2013
comment
Рад помочь! Не стесняйтесь принять ответ, чтобы другие могли видеть :) - person Opossum; 26.09.2013
comment
Вы пробовали это с ландшафтным приложением? высота устройства в альбомной ориентации по-прежнему равна 1024, поэтому нижняя часть экрана не видна. - person Kevin Zych; 01.10.2013
comment
Мое приложение поворачивается в альбомную ориентацию при повороте, и я не видел этой проблемы. Если я увижу это, я дам вам знать. - person Opossum; 03.10.2013
comment
Я еще не принял ответ, потому что это не решило мою проблему. На самом деле, это не имело никакого значения. Мой опыт был похож на то, что Павел описывает в другом ответе, и в качестве быстрого исправления у меня также было две разные таблицы стилей. - person Francesco; 07.10.2013
comment
У нас была аналогичная проблема с верхними элементами с абсолютным позиционированием, и в нашем случае приемлемым решением было установить высоту 768 в метатеге. - person nylund; 04.11.2013
comment
Я также сталкиваюсь с той же проблемой в iOS7 в собственном приложении, но не могу исправить ее с помощью приведенного выше кода. Я использую URL-адрес для загрузки в веб-просмотре, любая помощь? - person Sudheer Kumar Palchuri; 31.12.2013
comment
‹3 Отлично работает для меня на iOS7, большое спасибо... Это решило многолетнюю проблему, лол... - person Ilan Kleiman; 19.01.2014
comment
Пробовал это, но у меня не сработало. Единственное, что мне помогло, это изменить фиксированные элементы на абсолютные и обновить верхнее значение значением прокрутки. - person nicolas; 11.02.2014
comment
Не работает для меня. На самом деле target-densityDpi больше не поддерживается. Я получаю, что ключ аргумента Viewport target-densitydpi не распознается и игнорируется. через браузер Safari. - person Moos; 15.04.2014
comment
Мою тоже спас. Удивительно, как я никогда бы не исправил это с помощью метатега. - person PedroGabriel; 28.10.2014

В нашем случае это исправится, как только пользователь прокрутит страницу. Итак, это исправление, которое мы использовали для имитации прокрутки на blur на любом input или textarea:

$(document).on('blur', 'input, textarea', function () {
    setTimeout(function () {
        window.scrollTo(document.body.scrollLeft, document.body.scrollTop);
    }, 0);
});
person basarat    schedule 10.07.2014
comment
Форсирование прокрутки, подобное этому, сработало для меня. Приведенное ниже исправление области просмотра может работать, но также может вызвать проблемы с приложениями Cordova, где ширина = ширина устройства, высота = высота устройства могут привести к проблемам с прокруткой. issues.apache.org/jira/browse/CB-4323 - person zungaphobia; 17.07.2014
comment
Это решение кажется единственным, которое ничего не ломает. Вы также можете проверить пользовательский агент, чтобы ограничить это только мобильными устройствами. var is_mobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i); - person Dominique Alexandre; 05.05.2015

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

Единственное решение, которое я нашел, заключалось в том, чтобы иметь пользовательскую таблицу стилей iPad, которая заменяет все фиксированные элементы абсолютными элементами, устанавливает для свойства css bottom значение auto и вместо этого использует top.

person Pawel Lipka    schedule 03.10.2013

Напротив, ваше решение сработало для меня, но только когда масштаб был установлен на 1,0. Если я установлю его на 0,9, то это будет так, как было до предложенного вами исправления. Я установил начальный масштаб, максимальный масштаб и минимальный масштаб на 0,9, и эффект подпрыгивания фиксированных объектов при появлении клавиатуры все еще происходил.

person David Shears    schedule 11.10.2013
comment
Если повозиться с метаконтентом, кажется, что проблема в минимальном масштабе. При игнорировании проблемы с фиксированной позицией существует. Если установлено значение меньше 1,0, проблема фиксированной позиции существует. Если установлено значение больше или равное 1,0, проблема с фиксированной позицией решена. - person David Shears; 11.10.2013
comment
Это не ответ, а просто наблюдение; таким образом, принадлежащий как примечание вместо этого. - person Lev; 01.08.2014