2012-05-16 4 views
8

Я работаю над небольшим приложением, которое использует Sencha Touch 2 для пользовательского интерфейса. Прямо сейчас я запускаю его в Safari на своем iPad и iPhone.Предотвращение перемещения пользовательского интерфейса при появлении клавиатуры

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

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

Вот два скриншота, которые демонстрируют проблему. На втором снимке экрана вы видите эффект, когда клавиатура видна.

Есть ли способ предотвратить это поведение, и у Safari изменить размер вместо пользовательского интерфейса?

Normal view


Keyboard enabled

+0

Вы получили исправление этого? –

+0

@AdilMalik: Нет, к сожалению, нет – BastiBen

+0

Любое обновление об этой глупой проблеме ???? любое решение? –

ответ

-1

Вам нужно будет вызвать метод blur() на textfield

// Assuming the id of textfield - "textFieldId" 
Ext.getCmp('textFieldId').blur(); 

Попытки forcefully размытие ввода фокус для поля.

+0

Не скрывает ли клавиатура, так как текстовое поле теряет фокус? Дело в том, что я действительно хочу, чтобы клавиатура была там, но без половины пользовательского интерфейса, сдвинутого с экрана. – BastiBen

+0

Что вы пытаетесь достичь? Half Keyboard + остальное половина вашего приложения ...? –

+0

Посмотрите на два скриншота. На нижнем снимке экрана вы видите, что клавиатура выдвинула весь пользовательский интерфейс. Верхняя панель инструментов исчезла. Я хочу отобразить клавиатуру без ее нажатия UI в верхней части экрана. Вместо этого он должен изменить размер. – BastiBen

-2

Если вы используете html в элементах Sencha, необходимо удалить что-то тег html. Или вы можете поместить тег
в исходный html-код. Я надеюсь помочь вам. :)

+0

Извините, я не уверен, что вы имеете в виду. – BastiBen

+1

Не могли бы вы написать код? и я говорю, где ошибка. Спасибо – hekomobile

4

К сожалению, Apple хочет, чтобы это поведение, но someone предложил немного хак с помощью window.scrollTo():

listeners: { 
    focus: function() { 
     window.scrollTo(0,0); 
    } 
} 
+0

Спасибо за этот ответ!Это все еще не идеально, так как пользователь может видеть начальное движение, которое фиксируется сразу после этого. Кроме того, он отлично работает. –

0

Я нашел решение, которое работает для меня. Вы перемещаете верхнюю панель в контейнер.

xtype: 'container', 
       docked: 'top', 
       height: '100%', 
       html: '', 
       itemId: 'MyContainer', 
       width: '100%', 
       items: [ 
        { 
         xtype: 'titlebar', 
         docked: 'top', 
         itemId: 'topBar', 
         title: 'Obec Webchat', 
         layout: { 
          type: 'hbox', 
          align: 'start' 
         }, 
         items: [ 
          { 
           xtype: 'button', 
           action: 'back', 
           id: 'BackButton', 
           itemId: 'BackButton', 
           margin: '5 70% 5 15', 
           ui: 'back', 
           text: 'Home' 
          } 
         ] 
        }, 
        { 
         xtype: 'container', 
         docked: 'bottom', 
         height: '95%', 
         html: '<iframe src="http://webim.obec.local/" width="100%" height="100%" scrolling="yes"></iframe>', 
         itemId: 'MyContainer1', 
         width: '100%' 
        } 
       ] 
      } 

Надеюсь, это поможет.

1

Ввод этого кода в функции запуска в app.js работал для меня:

if (Ext.os.is.Android) { 
     Ext.Viewport.on('painted', function() { 
      Ext.Viewport.setHeight(window.innerHeight); 
     }); 
    } 

    if (Ext.os.is.iOS) { 

     Ext.Viewport.on('painted', function() { 
      Ext.Viewport.setHeight(window.innerHeight); 
     }); 
    }