html - Iphone safari 无法在键盘打开时调整视口(viewport)大小

标签 html ios css mobile-safari viewport

当键盘弹出时,移动版 safari 不会更新 window.innerHeight。 (至少在 9.3.5 中,并且有几个答案,如 this 一个,评论说在 ios 8.2 中崩溃了)

Apple documentation used to say before they edited it window.innerHeight 将在 iOS 10 中回归。

In iOS 10, WKWebView objects match Safari’s native behavior by updating their window.innerHeight property when the keyboard is shown, and do not call resize events.

我需要知道在此期间要做什么来处理 iphone safari 只是将网站推出 View ,而不是调整大小。


我有一个对所有内容都使用绝对定位的应用程序,并且有一个在页眉和页脚之间溢出的 div。

.mainContent {
  position: absolute;
  top: 50px;
  bottom: 28px;
  left: 0;
  right: 0;
}

Plunker在这里。

屏幕截图,在 android 上按预期工作:

在 iphone 上没有按预期工作:

基于 this answer我有一个 native JS 方法来确定 iphone 键盘是否打开,

    document.getElementById('chat-input').addEventListener('focus', function(){
      if(/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream){
        console.log("IOS focus");
        var scroll = window.scrollTop;
        window.scrollTop = 10;
        var keyboard_shown = window.scrollTop > 0;
        window.scrollTop = scroll;

        if(keyboard_shown){
          console.log("keyboard");
        }else{
          console.log("no keyboard");
        } 
      } 
    });
  })();

但这实际上并没有解决问题,因为 window.innerHeight 没有改变,所以我不知道键盘有多大。我可以列出 iphone 分辨率及其键盘高度,然后成为一个糟糕的硬编码人......

最佳答案

从 iOS 13 开始,这似乎已经通过使用 VisualViewport API 解决了。实现。

关于html - Iphone safari 无法在键盘打开时调整视口(viewport)大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39417778/

相关文章:

ios - isAvailableForServiceType 方法返回 NO 怎么办

CSS 页脚链接不会变为白色

javascript - 类似 iPhoneX 通过拖动显示/隐藏菜单/容器

php - 如何摆脱文本区域中的多余空格?

javascript - 如何禁用浏览器的clt+u?

iphone - 从 map View 中获取 DetailView 中的 xml 数据(Iphone IOS)

ios - UIDatePicker 最小日期(不含星期日)

javascript - 具有随机 X、Y 和 Angular 2D 旋转 jQuery

html - Blogger 上的 float 社交媒体重叠

javascript - 使用串联将图像 url 设置为背景属性