Ionic 4 键盘覆盖输入字段

2024-05-02

我有一个 Ionic 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>

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

从“jquery”导入*作为$;

全局.scss

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

应用程序组件.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";
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ionic 4 键盘覆盖输入字段 的相关文章

随机推荐

  • 当属性值在 HTML5 中可以保持不带引号时

    HTML5 中什么时候属性值可以保持不带引号 HTML4 01 是一个 SGML 应用程序 因此 在 HTML4 中 如果值中使用的唯一字符是当前声明为名称字符的字符 字母数字字符 句号 则可以省略引号 好吧 来自 W3C 工作草案 201
  • Angular2 找不到命名空间“google”

    我正在与angular2 google maps以及最新版本的 Angular2 我正在尝试将一些本地地图组件功能转换为自己文件中的服务maps service ts 例如 地图组件 ts getGeoLocation lat number
  • 让 Selenium 与 Bootstrap 模式淡入淡出配合的建议?

    我正在努力以 BDD 的方式生活 我正在使用 Cucumber 带有 Selenium 并且碰巧在我的应用程序中使用 Twitter Bootstrap 模式 在运行 Cucumber 测试时 我得到了 Selenium WebDriver
  • 错误 - 仅返回类型不同的函数不能重载。由 小码哥发布于

    我正在尝试创建一个图书馆管理系统 我收到一些我不明白的错误 我在 Mac 操作系统中使用 Eclipse 我的主要代码是 include
  • MongoDB 聚合查询与 MySQL SELECT field1 FROM 表

    我对 MongoDB 完全陌生 想要比较 NoSQL 数据模型相对于关系数据库对应部分的查询性能 我将其写入 MongoDB shell Make 10 businesses Each business has 10 locations E
  • 未找到“google\appengine\CreateUploadURLRequest”类

    我正在使用谷歌云CORE PHP使用简单的 HTML 表单上传文件但我被困在CloudStorageTools班级 它会抛出连续的跟随错误 致命错误 类 找不到 google appengine api cloud storage Clou
  • Mac OS 上的 pybluez 安装错误

    我尝试安装pybluez使用以下命令 pip install pybluez sudo easy install pybluez 但对于这两个命令我最终都会出错 环境 Mac OSX 10 9 1 Python 2 7 点日志 cc fno
  • 如何指定登录表单链接的返回 URL?

    看起来很简单 但事实并非如此 主要是因为视图不可能知道通过模型和控制器到达那里的方式 无论如何 这是一个需要解决的问题 我有一个登录链接 它将用户带到一个表单以输入用户名和密码 当用户单击 提交 时 我想重定向到他正在查看的页面 最简单的方
  • 如何实现 IFilter 来索引重量级格式?

    我需要为 Microsoft Search Server 2008 开发一个 IFilter 它执行长时间的计算来提取文本 从一个文件中提取文本可能需要 5 秒到 12 小时 我如何设计这样的 IFilter 以便守护进程不会在超时时重置它
  • 如何在Android模拟器中找到数据库文件的路径?

    我正在 Android 模拟器中执行一些 sqlite 查询 我想知道数据库文件存储在哪个路径 请给我一些如何找到它的想法 如果你能给我一些代码片段 乌尔 s 库马兰 数据库通常存储在 data data your applications
  • Karma 与 Webpack 和 Typescript 不执行任何测试

    我试图弄清楚如何将 Karma 测试运行器与 Webpack 和 Typescript 源文件一起使用 以此源文件作为唯一的测试文件为例 测试规格 var message string yay alert message describe
  • android中textview截断一个字母

    这是我的 Android 设备的屏幕截图 文字是 asd 然而 d 被稍微切断了 这是相关视图
  • 在 Rust 中使用结构体的生命周期的正确方法是什么?

    我想写这样的结构 struct A b B c C struct B c C struct C The B c应该借自A c A gt b B gt c C borrow from c C lt 这是我尝试过的 struct C struc
  • 如何在R中制作渐变颜色填充时间序列图

    How to 填充区域 sp 线下方和上方渐变色 这个例子是在 Inkscape 中绘制的 但我需要垂直渐变 不是水平的 间隔从zero to positive 来自white to red 间隔从zero to negative 来自wh
  • 如何获取 vscode 扩展中的 vscode 主题颜色?

    我想在我的扩展中使用当前 vscode 主题中使用的一些颜色 我如何获得颜色 换句话说 我想在扩展运行时将使用原始颜色的扩展颜色与基本 vscode 窗口相匹配 您可以参考工作台颜色 https code visualstudio com
  • Facebook Stream.publish 带有来自 Base64 的图像附件

    我正在尝试让 facebook 的stream publish 制作一个墙贴 其中包含一些自定义文本和从该网站动态生成的图像 该图像仅以 Base64 形式提供 因为它是由用户在启动发布操作之前绘制的 Facebook 似乎不喜欢 src
  • 如何在半屏上呈现 ViewController

    我有一个UIViewController其中只有一个UIView从底部覆盖了 viewController 的 1 3 像这样 我想在另一个 ViewController 上呈现这个 viewController 它应该从底部动画显示 并且
  • CSS 可见性动画不起作用

    我想在 CSS 可见性属性上制作基于关键帧的动画 我最初在 显示 上尝试过 但发现不支持 显示 上的动画 但支持 可见性 这个想法是让矩形的可见性不断切换 我不想使用 jquery 并且想在 CSS 中实现整个它 以下是我的代码 但它没有给
  • Java Marine API - 寻找 NMEA 数据

    我的最终目标是从 Adafruit Ultimate GPS NMEA 0183 标准 接收纬度和经度 GPS 信息到我的 Java 应用程序 我正在使用 Java Marine API 来执行此操作 然后 当前位置将与时间戳一起写入数据库
  • Ionic 4 键盘覆盖输入字段

    我有一个 Ionic 4 应用程序 其中有一个包含输入的表单 当用户单击输入时 它会打开键盘 但会隐藏内容 而不滚动 有没有办法解决 这是我的代码