2013-09-24 2 views
19

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

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

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

ответ

44

Это устранило проблему для моего приложения 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" /> 
+0

Рад помочь! Не стесняйтесь принимать ответ, чтобы другие могли видеть :) – Opossum

+3

Вы пробовали это с помощью ландшафтного приложения? «высота устройства», когда в ландшафте все еще 1024, поэтому нижняя часть экрана не отображается. –

+0

Мое приложение поворачивается к пейзажу при повороте, и я не видел эту проблему. Если я увижу это, я дам вам знать. – Opossum

6

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

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

-1

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

+1

Обманывая содержание мета, кажется, что проблема минимальная. При игнорировании позиции фиксированная проблема существует. Если установлено значение меньше 1,0, проблема с фиксированной позицией существует. Если установлено значение, большее или равное 1.0, исправлена ​​проблема с фиксированной позицией. –

+0

Это не ответ, а просто наблюдение; таким образом, вместо этого используется примечание. – Lev

8

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

$(document).on('blur', 'input, textarea', function() { 
    setTimeout(function() { 
     window.scrollTo(document.body.scrollLeft, document.body.scrollTop); 
    }, 0); 
}); 
+0

Принуждение такого прокрутки сработало для меня. Исправление просмотра в формате * может * работать, но также может вызывать проблемы с приложениями Кордовы, где width = ширина устройства, высота = высота устройства, может привести к проблемам с прокруткой. https://issues.apache.org/jira/browse/CB-4323 – zungaphobia

+0

Это решение, похоже, единственное, что ничего не сломает. Вы также можете проверить агент пользователя, чтобы ограничить его только мобильными устройствами. var is_mobile = navigator.userAgent.match (/ (iPad) | (iPhone) | (iPod) | (android) | (webOS)/i); –