IOS 7 - CSS - высота HTML - 100% = 692 пикселей

У меня странная ошибка на iPad iOS7 в ландшафтном режиме.

Что мне удалось выяснить, так это то, что в iOS7 window.outerHeight равен 692px, а window.innerHeight 672px; в то время как в предыдущих версиях оба значения были 672px.

Хотя мой <html> а также <body> высота тэгов 100%, кажется, есть место для прокрутки, и странно то, что эта проблема появляется только на landscpae

Вы можете увидеть то, о чем я говорю, посетив t.cincodias.com, например, в iPad для iOS 7 панель нижнего колонтитула (или иногда заголовок) будет обрезана. Но в предыдущих версиях iOS контент отображается нормально в полноэкранном режиме.

Даже когда я устанавливаю высоту обоих тегов в height: 672px !important а также position:absolute; bottom: 0;, вы по-прежнему можете прокручивать содержимое по вертикали, нажав на фрейм (объявления - это фреймы).

Я использую версию-кандидат iOS7

спасибо за любую помощь.

4 ответа

Я использовал это решение JavaScript для решения этой проблемы:

if (
    navigator.userAgent.match(/iPad;.*CPU.*OS 7_\d/i) && 
    window.innerHeight != document.documentElement.clientHeight
) {
    var fixViewportHeight = function() {
        document.documentElement.style.height = window.innerHeight + "px";
        if (document.body.scrollTop !== 0) {
            window.scrollTo(0, 0);
        }
    };

    window.addEventListener("scroll", fixViewportHeight, false);
    window.addEventListener("orientationchange", fixViewportHeight, false);
    fixViewportHeight();

    document.body.style.webkitTransform = "translate3d(0,0,0)";
}

Я считаю, что это ошибка в iOS 7 - если вы поворачиваете ее в портретный режим, она устанавливает оба (innerHeight/outerHeight) в одно и то же значение. Если это не ошибка, то в портретном режиме есть, потому что поведение не соответствует.

Вы можете обнаружить iOS 7/ мобильный Safari и использовать window.innerHeight, если iOS 7.

Я объединю ответы. Спасибо всем!

Вы можете сделать что-то вроде этого:

if (navigator.userAgent.match(/iPad;.*CPU.*OS 7_\d/i)) {
    $('#yourDivID').height(window.innerHeight);
    window.scrollTo(0, 0);
}

Window.scrollTo решает проблему перекрытия панели в альбомной ориентации при вращении.

Ура!

Я воспроизводлю ту же проблему в iOS 8.

Вот мое решение.

Я прослушал событие resize, scroll, directionChange, чтобы при изменении размера экрана триггера пользователя вызывать функцию сброса высоты.

Я написал debounce, чтобы предотвратить многократный звонок.

И это в закрытии и не зависит (нет jQuery).

(function(){
  var setViewportHeight = (function(){
    function debounced(){
      document.documentElement.style.height = window.innerHeight + "px";
      if (document.body.scrollTop !== 0) {
          window.scrollTo(0, 0);
      }
    }
    var cancelable = null;

    return function(){
      cancelable && clearTimeout(cancelable);
      cancelable = setTimeout(debounced, 100);
    };
  })();

  //ipad safari
  if(/iPad/.test(navigator.platform) && /Safari/i.test(navigator.userAgent)){  
    window.addEventListener("resize", setViewportHeight, false);
    window.addEventListener("scroll", setViewportHeight, false);
    window.addEventListener("orientationchange", setViewportHeight, false);
    setViewportHeight();
  }
})();
Другие вопросы по тегам