ionic html5 select/keypad 打开,向上滚动视图和选项卡并在 iOS 上的选项卡后创建空 space

ionic html5 select/keypad open, scroll the view and tab to upward and create empty space after tab on iOS

我将 ionic v1 与 angularJS 一起使用,并且我有 ion 选项卡:

<ion-tabs class="tabs-icon-top tabs-color-active-positive">

  <!-- Home Tab -->
  <ion-tab icon-off="ion-home" icon-on="ion-home" href="#/tab/home">
    <ion-nav-view name="tab-home"></ion-nav-view>
  </ion-tab>

  <!-- Calendar Tab -->
  <ion-tab icon-off="ion-calendar" icon-on="ion-calendar" href="#/tab/calendar">
    <ion-nav-view name="tab-calendar"></ion-nav-view>
  </ion-tab>
</ion-tabs>

在日历选项卡中,我有如下 html 选项:

<select ng-options="x for x in $ctrl.startTimes"></select>

当 select 菜单打开时,视图向上滚动并在 ion-tabs 下创建空 space。

如何将视图移动到 select 菜单打开前的初始位置?

最后,我找到了一种解决方法,它仍然存在一些小问题。为了解决它,我执行以下操作:

首先:在app.js中我禁用滚动如下:

if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
        cordova.plugins.Keyboard.disableScroll(true);

}

其次:注册小键盘隐藏事件,当小键盘或select控件关闭时会触发keyboardHideHandler

window.addEventListener('native.keyboardhide', keyboardHideHandler);

第三:实现keyboardHideHandler如下。实施所有问题后只发生在第一次,所以你必须使用标志 isFirstTimeEdit:

var isFirstTimeEdit = true; 
function keyboardHideHandler(e){
      if(isFirstTimeEdit) {
        isFirstTimeEdit = false;

        if(window.scrollY >= 20) {
          document.body.style.marginTop = "20px";
        }
      }
      window.removeEventListener('native.keyboardshow', keyboardShowHandler);
}