关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案

iOS微信小程序键盘弹出时输入框被挡住 底部输入框采用fixed定位后,在iPhone13这种有底部安全区的手机上,键盘弹出时被遮挡,在安卓机上是正常的。 阅读详情

手机端IOS系统微信中虚拟键盘遮挡input输入框问题解决方案

最近在工作中遇到了一个关于手机端IOS系统的第三方软键盘唤起导致底部输入框被遮挡的问题,具体情况是要求实现一个手机端在线聊天页面,需要仿微信的聊天页面,一开始整个页面的布局是这样的:

这里写图片描述

基本HTML结构

<div class="nav"></div>
<div class="content"></div>
<div id="returnframe">
   <input type="text" name="inputframe" class='inputframe'>
   <div class="returnframe_button">发送</div>
</div>

CSS

/*聊天窗口_顶部*/
.nav{
    display:block;
    position:fixed;
    top:0;
    width:100%;
    height:50px;
    font-size:2rem;
    background-color:#393a3f;
    z-index:99;
}
/*聊天窗口_内容*/
.content{
    display:block;
    position:absolute;
    top:50px;
    bottom:50px;
    width:100%;
    height:auto;
    background-color:#ebebeb;
    overflow-y:scroll;
    -webkit-overflow-scrolling:touch;
}
/*聊天窗口_底部*/
#returnframe{
    display:block;
    position:fixed;
    bottom:0;
    width:100%;
    height:50px;
    background-color:#f4f4f4;
    border-top:1px solid #d8d8d8;
    z-index:99;
}

顶部栏和底部输入栏使用的是相对于视窗定位的fixed固定定位,中部聊天窗口使用的是absolute绝对定位,同时设定其距离顶部和底部50(顶部和底部的高度),overflow-y:scroll(若中部聊天窗口内容过长则使用滚轮显示超出部分的内容)

该布局在Android的系统中不论是系统自带还是第三方软键盘唤起时都没有出现输入框被遮挡的现象,而在苹果的IOS系统环境下则出现了遮挡现象

最初在网上搜集解决的办法中了解到,IOS对于CSS的fixed固定定位支持程度并不好,即便是部分Android机型对其兼容性也较低,极易出现各种奇葩的BUG,举例如下

  1. 本次遇到的输入框被遮挡

  2. 输入框被顶到屏幕中央

  3. 顶部栏消失或定位异常等
    这里写图片描述

经过思考和资料查阅,可以总结出以上问题发生的根本原因:

  1. 手机端对于CSS的fixed固定定位本身加兼容性不佳,导致fixed失效或被默认变成为absolute定位,使布局发生变化

  2. 第三方输入法,以百度输入法为例,在输入时会有一个toolbar,这就导致即使输入框已经随软键盘弹起,但正好被toolbar挡住绝大部分内容

  3. 部分键盘可能浮动于上层,在不影响布局的前提下恰好对输入栏形成了视觉遮挡

根据问题发生的根本原因,通过网络资料查阅,整理出以下的大人们的部分解决方案

网上达人们思考的各种解决方案:

  • 使用 ionic-plugins-keyboard 插件或者使用 cordova-plugin-keyboard 插件解决

    原理:通过插件中的方案从而监听键盘弹出事件或者改变布局结构,使键盘弹出时整体界面上移

    优点:统一在Android和IOS系统上的体验效果,在达到目的的同时减少触发其他BUG的可能

    缺点:插件的导入会增大文件的整体体积,同时影响页面响应时间

  • scrollView()方法

    原理:若内容在可视域内则它什么也不做,若不在可视域,则使输入框出现在可视域范围内

    优点:解决方法简单,较为折中

    缺点:可能会触发其视觉上的bug,实现的效果不确定,即输入框出现的位置在各个设备上有所差别甚至没有得到解决

  • 修改设计稿,尽量使输入框不再页面的50%以下部分,或采用分页设计和弹出输入层

    原理:通过更改设计稿的设计,使页面中的输入和相关内容尽量出现在页面的上50%部分,或者将输入框设置为弹出层,输入时弹出层赞软键盘上方,从而使键盘弹出时不造成遮挡,影响视觉
    优点:根本上避免软键盘遮挡输入内容的问题
    缺点:更改设计稿在设计前就和设计师充分沟通,但不是总能在进行每个项目时都能及时赶上,同时不能确定设计师和客户是否会做出让步(嗯,你懂的)

  • js获取软键盘高度

    原理:通过js监听resize事件同时实时获取或计算每一种弹出的软键盘高度以改变输入框位置

    优点:简单粗暴

    缺点:若不是在底层Android编程时实现,仅通过js拿不到键盘的弹起/收起事件,同时ios上键盘弹起/收回不会触发window.resize事件,android4.4以下, 键盘唤起时, 不仅会触发resize, 还会额外会触发scroll事件,整体上造成出现了各种新的不确定因素

  • 通过js实时获取webview的变化来使软键盘弹出时,内容跟随变化

    原理:通过Native.js,后去webview的高度,屏幕的高度,状态栏的高度,从而计算出每次弹出的软键盘的高度

    优点:快速解决问题的同时能加深对js和native.js的理解

    缺点:需要判断平台,同时要求使用者掌握的技术水平较高,因为Native.js是直接调用Native API,需要对Native API有一定了解,知道所需要的功能调用了哪些原生API,能看懂原生代码并参考原生代码修改为JS代码

  • iScroll解决

    原理:导入iScroll框架,通过它来模拟滚动效果,取代原有的滚动,从而在软键盘弹出,改变滚动条的同时改变输入框和页面的位置

    优点:在解决问题的同时还能做其他拓展(iscroll是个轻量的好东西)

    缺点:会对页面响应速度有些许影响,同时需要了解iScroll的各类参数设定

  • 设置定时器,当软键盘唤起瞬间同时改变输入框的位置

    原理:判断是否是IOS终端,当输入框获得焦点时候,等待一定时间(键盘弹出动画时间)后滚动到页面底部

    优点:实现方法较为简单,不依赖于第三方代码加入

    最终解决方案

    先参考了大神的方案移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题
    然后是自己理解后对自己代码的更改

CSS

/*聊天窗口_顶部*/
.nav{
    display:block;
    position:absolute;
    top:0;
    width:100%;
    height:50px;
    font-size:2rem;
    background-color:#393a3f;
    z-index:99;
}
/*聊天窗口_内容*/
.content{
    display:block;
    position:absolute;
    top:50px;
    bottom:50px;
    width:100%;
    height:auto;
    background-color:#ebebeb;
    overflow-y:scroll;
    -webkit-overflow-scrolling:touch;
}
/*聊天窗口_底部*/
#returnframe{
    display:block;
    position:absolute;
    bottom:0;
    width:100%;
    height:50px;
    background-color:#f4f4f4;
    border-top:1px solid #d8d8d8;
    z-index:99;
}

上面的CSS中,首先将顶部和底部原来的fixed固定定位修改为了absolute绝对顶为,从而避免fixed存在于各类手机端系统上的兼容性问题,同时避免在底部输入栏在定位形式发生改变时造成的居中显示问题

JS

//解决第三方软键盘唤起时底部input输入框被遮挡问题
    var bfscrolltop = document.body.scrollTop;//获取软键盘唤起前浏览器滚动部分的高度
    $("input.inputframe").focus(function(){//在这里‘input.inputframe’是我的底部输入栏的输入框,当它获取焦点时触发事件
        interval = setInterval(function(){//设置一个计时器,时间设置与软键盘弹出所需时间相近
        document.body.scrollTop = document.body.scrollHeight;//获取焦点后将浏览器内所有内容高度赋给浏览器滚动部分高度
        },100)
    }).blur(function(){//设定输入框失去焦点时的事件
        clearInterval(interval);//清除计时器
        document.body.scrollTop = bfscrolltop;将软键盘唤起前的浏览器滚动部分高度重新赋给改变后的高度
    });

在第三方软键盘被唤起时,浏览器内所有内容高度发生了改变,将他赋给浏览器滚动部分高度,从而使页面改变,同时始终能在键盘唤起的相近时间内正确对应到相应位置,从而使输入框在视觉上能仅仅贴住被唤起的软键盘+toolbar顶端,解决了输入框被遮挡和或顶部栏消失问题

以上就是解决第三方软键盘遮挡输入框问题的方案。。。
这里写图片描述
你说我今天为什图那么少?。。。。。。

这里写图片描述
因为被这个问题折腾了一天脑子有点糊了

Unity微信小游戏开发实战:性能优化与平台适配全攻略 游戏开发中,性能优化与平台适配是确保产品流畅运行的核心技术。其原理在于通过资源管理、渲染管线优化和代码效率提升,平衡视觉效果与执行效率,从而在有限硬件资源下实现最佳用户体验。这项技术的价值在于能显著提升应用在移动端的稳定性和用户留存率,尤其在微信小游戏等超级流量平台中,直接关系到产品的商业成功。应用场景广泛覆盖了从轻度休闲到中度复杂的各类移动端游戏开发。本文聚焦于Unity引擎开发微信小游戏这一具体实践,深入剖析了如何通过模块化设计、渲染管线选型、资源极致压缩以及针对微信平台生命周期的深度适配,解决**性能 阅读详情

相关推荐

iOS解决键盘弹出遮挡输入框问题

1、错误:                 键盘遮挡输入框最常见的可能就是在登录界面了,无论有多少个textFiled,不论是在VC的任何位置。都有可能造成键盘弹出来时,把输入框挡住了。如图:                                                                                      

AppleWiner的博客 2万+

IOS遇到的几个H5坑、h5键盘弹起遮挡输入框的处理

原因分析:通常我们习惯用height属性设置行间的高度和line-height属性设置行间的距离(行高),当点击输入的时候,光标的高度就自动和父盒子的高度一样了。(谷歌浏览器的设计原则,还有一种可能就是当没有内容的时候光标的高度等于input的line-height的值,当有内容时,光标从input的顶端到文字的底部)问题描述:在ios端,上下滑动页面时,如果页面高度超出了一屏,就会出现明显的卡顿,页面有部分内容显示不全的情况,例如下图,右图是正常页面,边是ios上下滑动后,卡顿导致如左图下面部分丢失。

Bynine9的博客 5435

解决移动端 ios 系统键盘遮挡的问题

亲测 ios 9 ,ios10 系统有效,其他请自行测试,建议通过判断系统类型来动态引入此脚本 var isIPHONE = navigator.userAgent.toUpperCase().indexOf(IPHONE)!= -1; if(isIPHONE){ // 元素失去焦点隐藏iphone的软键盘 function objBlur(obj,time){ var startTime=0,endTime=0, time = !time?30:time, docTouchend = function(event){ endTime = new Date().ge

【IOS16底部input框被弹起来的软键盘挡住解决方法】

万能方法 解决input框被软键盘挡住

Newz0722的博客 909

IOS 键盘挡住输入框的问题解决办法

IOS 键盘挡住输入框的问题解决办法 在iOS开发发现一个问题,有时输入框位于低出时,当编辑输入时,弹出的键盘会挡住输入框,令用户看不清楚实时的输入情况,使界面交互极度不友好。 经过查资料终于解决了这个问题。 解决思路: 1. 输入框监听UIControlEventEditingDidBegin事件,当用户开始输入时,将整个view上移。 2. 输入框监听UIControlEventEditingDidEnd事件,当用户结束输入时,将整个view下移,恢复到原位置。 输入框监听事件: [textfield addTarget:self action:@selector(textFie

Kylin-Desktop-V10-SP1-General-Release-2303-X86_64-海光版(hygon c86)安装与配置指南

本文提供了在国产海光C86处理器平台上安装与配置Kylin Desktop V10 SP1操作系统的详细指南。内容涵盖从下载专用镜像、制作启动盘、BIOS关键设置、磁盘分区方案,到系统安装后的驱动优化、必备软件安装及常见故障排除,旨在帮助用户顺利完成hygon c86平台的系统部署与优化。

tree的博客 1384

ios中调起底部输入框时的一些问题

H5端,尤其是在ios中键盘弹起与收起时遇到的一些问题的解决方案

qq_45937484的博客 1008

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9193

关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案 草稿

关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案 转载于:https://www.cnblogs.com/benbendu/p/9214077.html

weixin_30663471的博客 254

基于FPGA的DDS信号发生器

之前的博客讲到了DDS的基本原理,现在用Verilog代码实现DDS,能够产生四种波形,方波,三角波,正弦波,锯齿波,用按键来控制频率和选择波形。其中按键消抖模块来自小梅哥的FPGA自学笔记设计与验证这本书。 module DDS_Module( Clk, Rst_n, EN, Fword, Key1, Pword, DA_Clk, DA_Data ); input Clk...

qq_43534451的博客 9950

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

注册表单设计:构建可信、高效、包容的用户入口

注册表单远不止是HTML输入框的堆砌,它是用户与产品建立首次信任的关键触点。其核心涉及表单验证原理、前端状态管理机制、无障碍(a11y)合规实践、响应式交互范式及密码强度等安全策略。在现代前端工程中,基于Vue 3 Composition API与成熟UI组件库(如Element Plus)可系统性解决实时校验、防抖控制、ARIA语义化、跨端键盘适配等高频痛点。尤其在提升转化率场景下,结构化兴趣标签、包容性性别选项、渐进式字段设计等细节,直接关联用户填写意愿与数据质量。本文聚焦真实项目落地中的可信感构建与工

weixin_33842304的博客 342

VIL-SLAM论文翻译:Stereo Visual Inertial LiDAR Simultaneous Localization and Mapping

文章目录写在前面摘要1.引言2.相关工作3.系统概述4.视觉前端5.双目视觉惯性里程计A. IMU预积分因子B. 非结构化视觉因子C. 优化和边缘化6. 激光建图A. LiDAR扫描去畸变B. 帧到地图配准7. LiDAR增强的闭环A. 回环检测B. 回环约束C. 全局位姿图优化D. 重定位8. 实验结果A.平台和软件B.测试和结果C. EuRoCMAV数据集测试9.结论 写在前面 写作参考: robot L 开源代码: 开源代码链接 论文原文: 原文链接 摘要 SLAM是移动和空中机器人的一项基本任务

JaydenQ的博客 2322

微信小程序踩坑之textarea软键盘遮挡解决方案(兼容安卓iOS)

可能这个方法不是最好的,但是目前的话测试是可以进行上线的一个效果,记录一下(我这里用到的是taro框架) 需求: 问题: 真机下键盘弹起会遮挡最下边文本域的部分,用户在输入的时候会看不到输入的文字。且若手机属于长度比较长的时候,页面高度没有超过一屏,用户手动滑动也是没用的,如图 期望: 键盘弹起时页面随之向上推,将文本域暴露出来 解决方案: 1、直接利用自带的属性adjustPosition。 缺点:会把我们fixed在页面上方的自定义导航栏也推上去,效果很差,如图: 2、咱自己动手,首页整个页面用

qq_41594043的博客 7483

OpenHarmony自定义Launcher

OpenHarmony源码版本:4.0release开发板:DAYU / rk3568DevEco Studio版本:4.0.0.600切换分支为OpenHarmony-4.0-Release,并下载源码。

Abner_Crazy的博客 1630

备考路上的学习笔记:我的软考高级架构师复盘与更新计划

本专栏基于作者备考软考高级系统架构设计师的真实经验,分为考前突击、基础夯实、核心突破、案例实战和论文通关五大模块。内容涵盖计算机体系结构、操作系统、数据库等核心知识,提供案例解析和论文范文。作者承诺持续更新考纲内容、真题复盘及互动答疑,旨在帮助考生系统备考,将个人踩坑经验转化为实用指南,陪伴考生共同完成从知识碎片到体系构建的蜕变历程。

qq837993702的博客 2295

ios输入框被键盘挡住的解决办法

做IOS开发时,难免会遇到输入框被键盘遮掩的问题。上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了。     有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollView )中,然后滚动视图实现输入框不被软键盘覆盖,个人觉得此方案好是好,但是太过麻烦。     有的解决方案是通过一个通知 UIKeyboardDidShowNotification

王梦琦的专栏 3万+

华为OD机考双机位C卷 - 斗地主之顺子 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 斗地主之顺子(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 9695

修复苹果iOS 原生键盘遮挡input框

最近在做一个仿微信的聊天界面,有一个固定在页面底部的input框,本来使用fixed定位在底部,在android手机上没有任何问题,但在iOS上当点击输入内容的时候会出现不同情况的原生键盘遮挡输入框的情况。度娘出了很多解决方法,但没有一个方法可以完美解决,而且发现很多人都有这个问题,自己就苦思冥想出了一个相对不错的解决方法,跟大家分享一下。 先跟大家列举一下网上的解决方法,还有我的实践结果 po...

weixin_33968104的博客 583

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

解决ios中input获取焦点,弹出输入法之后,input被遮挡的问题

1、ipad键盘悬浮使用; 2、可以采用全局获取输入框,对数据框获取焦点进行监听,获取焦点后可以将输入框滚动到可视区域,可以使用scrollIntoView方法,方法使用可参照以下链接文档:https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView。

zezejingi的博客 2337

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

iOS端键盘挡住输入框的完美解决办法即输入框位置如何随着键盘的升起而升高

相信大家写移动端肯定遇到过输入框被手机键盘挡住的问题,我自己也百度了很多办法,最开始是改变输入框的fixed定位为absolute定位,并不能实现效果,然后尝试用了以下方法: // css .mainBox{ height:100vh; position:relative; } .inputBox{ position:absolute; bottom:0; } //...

Mangojjx的博客 3796

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

我也不知道为什么iphone 虚拟键盘挡住了input输入框,解决方案

因为,iphone的虚拟键盘遮罩问题,我人都傻了,于是自己一个一个参数一直试,最后可以了,html比较乱,仅供参考。 <div class="top" style=" width: 100%; bottom: 0px; position: absolute; left: 0; background: #fff; margin-bottom:0px;

廖圣平 5893

移动端固定输入框在底部会被键盘遮挡的解决方法

由于公司需求,需要做一个实时对话的聊天功能。遇到各种小坑就不多说了,下面就记录一下遇到最坑的一个问题。。 界面布局写完后,在Android和iOS系统下测试了一下,问题来了!!!在Android系统中布局完美展示(这很好),但在iOS系统下,经常点击输入框键盘会把输入框挡住。如下图显示:

Leo的专栏 3万+

移动端底部input被弹出的键盘遮挡的解决办法

input输入框是通过position定位一直放在页面底部,当点击input进行输入的时候,部分机型(尤其是ios系统)底部input被弹出的键盘遮挡,如何解决这个问题呢?在解决这个问题的时候,有试过下面这种方法:在input的focus事件中,开启一个定时器,然后每隔300毫秒进行一次document.body.scrollTop=document.body.scrollHeight的调整,运行...

jiajunmiku的博客 6225

移动端 ios键盘挡住底部 输入框的问题完美解决方案

代码如下:: // CSS .scrollWrapper { position: absolute; left: 0; right: 0; bottom: 0; top:0; } bottomInput { position: absolute; bottom:0; left:0; right: 0; } // HTM

ITzhongzi的博客 4548

KXBuild 实战,Windows 编译 Kotlin Multiplatform iOS,真机调试、打包 IPA

KMP 的 iOS 端只能在 macOS 上编?在 Windows 上也能跑,iosApp 的构建、安装和调试交给 KXBuild,Gradle 脚本和 iosApp 工程都不用改。Kotlin Multiplatform iOS 流程:体检、在 Config.xcconfig 填 Team ID 和 Bundle ID、连 iPhone 按 F5,在 VS Code 里同时给 Swift 和 Kotlin 打断点、看跨语言调用栈,Compose Multiplatform 同样适用,打出可上架 ipa。

2501_91373349的博客 244
上一篇: 轻巧方便的触摸滑动插件-swiper,常用参数整理(一)
下一篇: js中的事件委托或是事件代理详解(转载)
RotatingBlock
博客等级 码龄10年 16粉丝 11原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值