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

Элемент Div не останется внизу, если присутствует виртуальная клавиатура ios 7

У меня возникла проблема с элементом div, чтобы придерживаться нижней части моего веб-приложения, когда появляется виртуальная клавиатура ios 7 после нажатия текстового поля.

У меня этот элемент div:

....
        <div id="footer" style="text-align:center">
            <div id="idName"><img alt="SomeName" src="images/logo.png" /></div>
        </div>

    </form>
</body>

Он использует этот стиль

#footer{
color:#CCC;
height: 48px;

position:fixed;
z-index:5;
bottom:0px;
width:100%;
padding-left:2px;
padding-right:2px;
padding:0;

border-top:1px solid #444;

background:#222; /* Old browsers */
background:-webkit-gradient(linear, 0 0, 0 100%, color-stop(0, #999), color-stop(0.02, #666), color-stop(1, #222));  
background:    -moz-linear-gradient(top, #999, #666 2%, #222); /* FF3.6+ */    
background: -webkit-linear-gradient(top, #999, #666 2%, #222); /* Chrome10+,Safari5.1+ */
background:      -o-linear-gradient(top, #999, #666 2%, #222); /* Opera 11.10+ */
background:     -ms-linear-gradient(top, #999, #666 2%, #222); /* IE10+ */
background:         linear-gradient(top, #999, #666 2%, #222); /* W3C */
}

И когда я нажимаю на текстовое поле, элемент нижнего колонтитула прыгает вверх над виртуальной клавиатурой. Он работал, когда мои iDevices работали над версиями до ios 7.

С левой стороны перед нажатием текстового поля и с правой стороны после нажатия текстового поля.

Left side: Before. Right side: After

Нижний колонтитул прыгает выше виртуальной клавиатуры.

UPDATE:

Я изменил метатег, предоставленный Opossum, и теперь нижний колонтитул находится внизу:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--<meta name="viewport" content="initial-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"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />

Extension

Это не является частью вопроса, но исправляет ошибки при работе на Android:) Любое решение для этого?

Решение: удалена максимальная шкала и целевая плотность Dpi, и теперь она работает как для IOS, так и для Android. Метатег теперь выглядит следующим образом:

<meta name="viewport" content="initial-scale=1.0, user-scalable=0, width=device-width, height=device-height"/>
4b9b3361

Ответ 1

EDIT: Хорошо, я нашел другое возможное решение. Проверьте свои метатеги 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" />

Это исправило проблему для меня. Я должен отметить, что мое приложение использует Кордову, хотя.

Другое возможное решение:

Если вы посмотрите в файле config.xml(возможно, в каталоге ресурсов, вы увидите строку, которая гласит:

<preference name="KeyboardShrinksView" value="false" />

Если вы установите для этого значение true, он удерживает нижние колонтитулы от перемещения над мягкой клавиатурой. Однако это также приводит к тому, что клавиатура иногда закрывает текстовое поле, которое пользователь вводит.

Ответ 2

Там виновник в вашем классе #footer bottom:0px; Если вы даете bottom любому элементу, при появлении виртуальной клавиатуры эти элементы перемещаются вверх в iOS 7. Обходным путем является использование свойства top.

Ответ 3

Утвержденный ответ работает, но может испортиться с некоторым CSS, поэтому я должен использовать что-то еще. Это не мое исправление, но нашло его на internet, и это сработало для меня:

HTML:

<body onResize="onResize();">

JavaScript:

function onResize(){
    var ios7 = (device.platform == 'iOS' && parseInt(device.version) >= 7);
    if (ios7){
        var height = $('body').height();
        if (height < 350){ // adjust this height value conforms to your layout
            $('.myBottomMenu').hide();
        }
        else {
            $('.myBottomMenu').show();
        }
    }
}

Ответ 4

Я немного опаздываю, но это хорошо работает:

var footer = $(".footer");
footer.css({ "top": footer.position().top, "bottom": "auto"});

Это предполагает фиксированный или абсолютно позиционированный элемент, который имеет нижнюю часть: некоторое число изначально. Добавьте это туда, где это уместно в ваших сценариях javascript (возможно, в функции, вызываемой при загрузке страницы). Это использует jQuery, но он легко переводится в javascript. Это в основном заставляет нижний колонтитул оставаться на дне, связанном с "верхним" значением, а не значением "bottom".

Ответ 5

Вот как мы это разрешили: кордова 2.9.0. Решение 1. Добавление метатегов viewport действительно разрешилось в некоторой степени, но не полностью. Решение 2.

$(document).on('focus','input, select, textarea',function() {
        if(OSName=== 'iOS' && ver[0] === 7){
                if($(this).attr('readonly')===undefined){
                        $('#footer').hide()
                }
         }
});
$(document).on('blur','input, select, textarea',function(){
             if(OSName=== 'iOS' && ver[0] === 7){
                   if($(this).attr('readonly')===undefined){
                   $('#footer').show();
                   }
              }
});

где #footer - это идентификатор div, который имеет нижний колонтитул. Это покажет панель инструментов для вспышки секунды и спрячет ее, чтобы избежать этого мерцания, мы добавили некоторый код в native, 1. Зарегистрируйтесь для события keyboardshow в вашем MainViewcontroller.m. добавьте в функционирование init следующее:

//fix for ios7 footer is scrolled up when the keyboard popsup.
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];

2.add следующую функцию

-(void)keyboardWillShow:(NSNotification*)notification{
    //call the javascript to hide the footer.
    //fix for ios7 footer is scrolled along wiht the content when the keyboard comesup.
    if (IsAtLeastiOSVersion(@"7.0")){
        [self.webView stringByEvaluatingJavaScriptFromString:@"()"];
    }
}

3. В js файле добавьте функцию

//Fix for footer is misalligned when the virtual keyboard pops up ios7
//check for device is iPhone and os version is 7
function hideFooter(){
    if(OSName=== 'iOS' && ver[0] === 7){
        if($(this).attr('readonly')===undefined)
            $('#footer').hide();
    }
}

Сообщите нам, если это решение работает для u.

Ответ 6

В моем случае я использовал  для захвата события при вводе событий ввода текстовых полей и скрытия нижней панели используя

if($(event.target).hasClass("inputtextfield")){

        $('.bottom_bar').hide();}

и захватить событие, когда клавиатура закрыта и отобразить клавиатуру с помощью

document.addEventListener('focusout', function(e) { $('.bottom_bar').show();});

Ответ 7

Основная проблема в вашем свойстве класса CSS

сноска {}

Вы установили позицию "fixed" и z-index.

Укажите свойство позиции обработчика в соответствии с Iphone.