cordova Ionic 4键盘罩输入区

xdyibdwo  于 2022-11-15  发布在  Ionic
关注(0)|答案(7)|浏览(161)

我有一个离子4应用程序,其中有一个输入的形式。
当用户点击输入时,它会打开键盘,但会隐藏内容,而不会滚动。
有什么办法吗?
这是我的代码:

<form #f="ngForm" (ngSubmit)="sendMail()">
   <ion-item>
     <ion-label position="floating">name
     </ion-label>
     <ion-input [(ngModel)]="senderName">
     </ion-input>
   </ion-item>

   <ion-item>
      <ion-label position="floating">mail
      </ion-label>
      <ion-input [(ngModel)]="senderMail">
      </ion-input>
    </ion-item>

    <ion-item class="borderedTextArea">
      <ion-textarea [(ngModel)]="mailText" style="height:150px;"></ion-textarea>
    </ion-item>

    <ion-button type="submit" style="float:left">send</ion-button>

</form>
lp0sw83n

lp0sw83n1#

我用以下方法暂时解决了这个离子错误:

...
<ion-texarea (ionFocus)="fixTextareaBug()">
...

在您的.ts中

@ViewChild(IonTextarea)
public ionTextArea: IonTextarea;
private focusFix = false;

...
...

public fixTextareaBug() {
  setTimeout(() => {
    if (this.focusFix) {
      this.focusFix = false;
      return;
    }
    (this.ionTextArea as any).el.lastElementChild.blur();
    this.focusFix = true;
    (this.ionTextArea as any).el.lastElementChild.focus();
  }, TEXTAREA_TIMEOUT);
}

我希望它解决了你的问题

wydwbb8l

wydwbb8l2#

我通过降级键盘插件来解决这个问题

ionic cordova plugin remove cordova-plugin-ionic-keyboard

ionic cordova plugin add cordova-plugin-ionic-keyboard@2.0.5

然后删除android平台并重新添加

i7uaboj4

i7uaboj43#

我也遇到过这个问题,但只是在android中,我所做的是创建一个脚本,获取焦点元素和键盘的高度,并使用jQuery添加了一个marginTop,以便在显示键盘时将主体移动到键盘上方,这是我的代码:

constructor(
    private platform: Platform,
    private keyboard: Keyboard
  ) {
    if(this.platform.is('android')){
      this.keyboard.onKeyboardShow().subscribe((e) => {
        const offset = $(document.activeElement).offset().top;
        let height = (offset - e.keyboardHeight)*-1;
        height = height > 0 ? 0 : height;      
        $('body').animate({ 'marginTop': height + 'px' }, 100);
      });
      this.keyboard.onKeyboardHide().subscribe(e => {
        $('body').animate({ 'marginTop': 0 + 'px' }, 100);
      });
    }
}

所需的库:

npm install jquery
    npm install @types/jquery
    ionic cordova plugin add cordova-plugin-ionic-keyboard
    npm install @ionic-native/keyboard

输入

import { Platform } from '@ionic/angular';
    import * as $ from "jquery";
    import { Keyboard } from '@ionic-native/keyboard/ngx';

不是一个优雅的解决方案,但它的工作
只需在此代码中进行一些更改,即可给予更好的体验

this.keyboard.onKeyboardShow().subscribe((e) => {
    const safeArea = 40 ;
    const offset1 = $(document.activeElement).offset().top;
    const offset2 = window.innerHeight - e.keyboardHeight - $(document.activeElement).height() - safeArea ;
    const diff = offset1 - offset2;
    if(offset1 > window.innerHeight -  e.keyboardHeight - safeArea)
        $('body').animate({ 'marginTop': -1 * diff + 'px' }, 100);
});

iaqfqrcu

iaqfqrcu4#

只需使用ionFocus事件和scrollToBottom函数即可解决此问题,然后在ionFocus中调用它,这样当您聚焦输入时,您的内容将滚动到底部strong text

ecfsfe2w

ecfsfe2w5#

你可以尝试一些组合

ionFocus

https://ionicframework.com/docs/api/input#events 和

scrollIntoView

https://developer.mozilla.org/de/docs/Web/API/Element/scrollIntoView(如果没有其他功能)

ua4mk5z4

ua4mk5z46#

我目前正在使用Ionic4和Cordova 9以及所有最新的软件包,但是我在这个框架中找不到任何适合我的设置。最后我做了这个解决方案,它完全绕过了这个框架。它有一点动画,看起来还不错,所以我一直在使用它,直到这个框架正确地解决了这个问题。
global.scss

ion-app {
    /*animation of native keyboard show*/
    transition: margin 300ms;
}

app.component.ts

declare var $: any;

ngAfterViewInit() {
    // This element never changes.
    let ionapp = document.getElementsByTagName("ion-app")[0];

    window.addEventListener('keyboardDidShow', async (event) => {
        // Move ion-app up, to give room for keyboard
        let kbHeight: number = event["keyboardHeight"];
        let viewportHeight: number = $(window).height();
        let inputFieldOffsetFromBottomViewPort: number = viewportHeight - $(':focus')[0].getBoundingClientRect().bottom;
        let inputScrollPixels = kbHeight - inputFieldOffsetFromBottomViewPort;

        // Set margin to give space for native keyboard.
        ionapp.style["margin-bottom"] = kbHeight.toString() + "px";

        // But this diminishes ion-content and may hide the input field...
        if (inputScrollPixels > 0) {
            // ...so, get the ionScroll element from ion-content and scroll correspondingly
            // The current ion-content element is always the last. If there are tabs or other hidden ion-content elements, they will go above.
            let ionScroll = await $("ion-content").last()[0].getScrollElement();
            setTimeout(() => {
                $(ionScroll).animate({
                    scrollTop: ionScroll.scrollTop + inputScrollPixels
                }, 300);
            }, 300); // Matches scroll animation from css.
        }
    });
    window.addEventListener('keyboardDidHide', () => {
        // Move ion-app down again
        // Scroll not necessary.
        ionapp.style["margin-bottom"] = "0px";
    });
}
92dk7w1h

92dk7w1h7#

<preference name="resizeOnFullScreen" value="true" />

您可以安装cordova-plugin-ionic-keyboard并编辑config.xml文件,然后添加以下代码行
cordova-plugin-ionic-keyboard
Android存在一个错误,该错误会阻止键盘在应用程序全屏显示时调整WebView的大小(即,如果使用StatusBar插件隐藏StatusBar)。如果将此设置设为true,则会添加一个解决方案,即使在应用程序全屏显示时也会调整WebView的大小。

相关问题