IOS下 input 被软键盘方案遮盖问题解决

前言:

 并没有完美解决 !

场景:

 最近在做企业微信H5的一个项目,里面有个动态列表页,开始输入框是隐藏的,点击评论才会出现并让 input 聚焦。经过测试在安卓上面应该没什么问题,但是iOS上面会出现 input 被软键盘遮盖或者半遮盖、甚至发送按钮不能点击的状况。

 总的来说问题有点小严重。

查阅百度:

 好的,百度一搜,哇!解决方案很多,我就放心的去抽了一根烟,想着分分钟完事。BUT 经过试验 百度 “ios 下input 被软键盘遮盖” 前两页没有一个能解决我的问题的!!!

 不过收获还是有的... 参考文章如下(写了三个比较可以的吧)

 https://blog.csdn.net/github_37533433/article/details/66471962

 https://juejin.im/post/5b0401b2f265da0b71569ca0

 https://www.cnblogs.com/wx1993/p/6059668.html

解决(Vue):

 因为 iOS 下软键盘弹出并不会改变窗口高度所以也就没试监听 window 的 resize 事件。

 第(n-2)次是在输入框获取焦点的时候:

// 输入框获得焦点
    onFocus(){
      var that = this;
      setTimeout(function(){
        that.sendText.scrollIntoView(true);
        that.sendText.scrollIntoViewIfNeeded();
      },100);
    },

 scrollIntoView(true):滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素。

 有效果,但是还是会有问题,偶尔还是会出现半遮盖的情况 iPhone6 尤为明显。

 第(n-1)次 是使用的滚动到底部的方法,因为项目的动态列表是有分页的,所以适当的改了一下。

created(){
    var u = navigator.userAgent;
    this.isAndroid =u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //Android终端
    this.isIOS =!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //IOS终端

  },
methods:{
    // 输入框获得焦点
    onFocus(){
      var that = this;
      this.bfscrolltop = document.body.scrollTop; // 记录当前位置
      if(this.isIOS){
        setTimeout(function(){
          document.body.scrollTop = document.body.scrollTop*1 + 200;
        },300)
      }

    },
},

 在点击发送的时候设置: document.body.scrollTop = this.bfscrolltop;

问题:

 1、在监听失去焦点的时候设置 document.body.scrollTop = this.bfscrolltop 是点不了发送的 (这就触及到我知识的盲区了)

 2、ios 不管型号(可能除了SE)第一次点击评论还是可能会出现半遮盖,或者全遮盖的情况。

 第n次 是在点击评论的时候 加了一个定时器(我不知道为什么这样写就好了!)

created(){
    var u = navigator.userAgent;
    this.isAndroid =u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //Android终端
    this.isIOS =!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //IOS终端

  },
methods:{
    // 点击评论
    commentClick(index){
      var that = this;
      if(this.isIOS){
        setTimeout(function(){
          document.body.scrollTop = document.body.scrollTop*1 + 300;
        },300)
      }
      that.$refs.import_inp.focus();
    },
    // 输入框获得焦点
    onFocus(){
      var that = this;
      this.bfscrolltop = document.body.scrollTop; // 记录当前位置
      if(this.isIOS){
        setTimeout(function(){
          document.body.scrollTop = document.body.scrollTop*1 + 200;
        },300)
      }

    },
    // 输入框失去焦点
    changeBlur(){
      var that = this;
      // input 输入框 内无内容的情况下点击ios软键盘的完成是可以回去的
      if(this.inputVal == ""){
        document.body.scrollTop = this.bfscrolltop;
      }
    },
    // 点击发送
    sendComment(){
        document.body.scrollTop = this.bfscrolltop;
    },
},

 注:以上代码只是关于input输入框被遮盖的。

 目前在 iPhone7 iPhone6 iPhoneSE 上没什么问题

问题:

 1、当输入框内有内容的时候,关掉软键盘是不能返回记录的位置的

总结:

 目前只能解决到这个地步了。黔驴技穷。

 有什么好的解决方案还望看到的朋友指点一二。

 根据自己的项目问题选择一个尽可能最好的方法解决

原文地址:https://www.cnblogs.com/wyhlightstar/p/9406386.html

时间: 2024-10-11 09:20:48

IOS下 input 被软键盘方案遮盖问题解决的相关文章

ios safari input fixed 软键盘里的爱恨情仇

请看第一题: 为什么我的input获取焦点后,被输入法遮住了. 解决办法: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery-3.1.0.js"></script> <style&g

ios下input focus弹出软键盘造成fixed元素位置移位

正常状态下 input focus软键盘弹出时 问题描述: 头部结构fixed,滚动到下部内容区域,input.textarea等focus弹出软键盘时,头部位置偏移被居中(该问题ios7 beta3已修复),当软键盘关闭时,头部结构位置又恢复正常 安卓手机下,fixed表现要比ios好,不会出现此问题 然而在移动端里,基本上所有手机,页面滚动的时候,任何js都不会执行,所以寻找css的方法(且js方法比较消耗性能) 各类大网站的解决方法:一般是页面上避免悬挂元素,或者有悬挂元素时,避免产生软键

解决iOS下input和fixed 问题

在ios下如果页面底部有fixed 元素当有input输入框触发键盘时fixed会浮动在页面出现展示总是 解决方法有很多种,但是要根据实际需要更改 方法一.css解决(弊端:当有大面积input元素时会出现滑动不顺畅问题) //这里给内容区域设置 position:absolute,并且设置一个距离fixed的底部距离 .main{ position:absolute; bottom:rem-calc(80px); //fixed元素的高度 top:0; left:0; width:100%;

清除IOS下input及textarea的阴影

在IOS下,input表单以及textarea默认会有个内阴影,一定程度上影响视觉一致,可通过设置下面代码去掉: input,textarea{     -webkit-appearance: none; }

手机端上点击input框软键盘出现时把input框不被覆盖,显示在屏幕中间

1  用定位为题来解决var oHeight = $(document).height(); //浏览器当前的高度      $(window).resize(function(){ if($(document).height() < oHeight){                 $("#footer").css("position","static");    }else{                 $("#foot

移除IOS下input输入框和按钮的原生样式

写WAP页面的时候  一定要加上这组样式,以避免在IOS下面按钮被系统原生样式影响 input,textarea {outline-style:none;-webkit-appearance:none;}

Android下强制打开软键盘

这个也是累人,网上查了很多方法,没有实现需求. 最后的实现方法很简单.代码: 1 //通过定时器强制打开虚拟键盘 2 public static void TimerShowKeyboard(final View v) 3 { 4 Timer timer = new Timer(); 5 timer.schedule(new TimerTask(){ 6 @Override 7 public void run() 8 { 9 InputMethodManager imm = ( InputMet

解决微信H5页面软键盘弹起后页面下方留白的问题(iOS端)

前言:微信H5项目,ios端出现了软键盘输完隐藏后页面不会回弹,下方会有一大块留白 最近微信和ios都有版本升级,不知道是哪边升级造成的,但是经过测试,软键盘收起后,再滚动一下页面,下面的留白就会消失.所以只要在输入完毕后模拟一下这个"滚动"的操作,就能解决问题了. 如果是用vue写的: <input type="text" @blur="fixScroll" placeholder="请输入xxx"/> //me

iOS中监控软键盘显示或隐藏的可靠方法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 如果你试图在软键盘的显示或隐藏时去改变的UI界面结构,仅有的方法是你可以依赖使用键盘的通知消息. UITextField代理消息只会在文本区域开始被编辑时发出,而不管屏幕上是否有软件盘显示. 记住,用户可以使用蓝牙键盘连接iOS设备,并且使用它去编辑文本区域或任何其他你App中可输入控件的内容. 在使用蓝牙键盘的情况下,并没有软键盘会显示在屏幕上--如果你在文