Проблема:
В iOS z-index
прокручиваемой области игнорируется при использовании -webkit-overflow-scrolling
. Если два объекта с -webkit-overflow-scrolling
перекрываются, нижний прокручивается вместо отображаемого выше.
Как воспроизвести:
Создайте два элемента, накладывающихся друг на друга (например, с position: absolute
), один из которых имеет более высокий z-index
и добавляет
.selector
{
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
для обоих из них. Оба элемента должны иметь достаточно прокручиваемого содержимого.
Дополнительно добавьте
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
на ваш <head>
. Затем добавьте страницу на главный экран и запустите ее оттуда.
Если вы затем попытаетесь прокрутить верхний элемент, вместо этого прокрутите элемент ниже.
MCVE:
В качестве альтернативы просто выберите это перо. Запустите версию full с вашего устройства iOS, добавьте ее на главный экран и запустите оттуда.
Окружающая среда:
Протестировано на iPhone 5 и iPhone 6 с iOS 9.1 и iOS 9.3.2
Замечания:
- Проблема возникает только при запуске страницы/приложения из главного экрана (прикрепленного приложения) или внутри веб-обозревателя Xamarin (возможно, что-то связано с UIWebView и WKWebView).
- После изменения ориентации устройства (портрет/пейзаж) после загрузки страницы проблема будет устранена до тех пор, пока страница не будет перезагружена (может быть, исправлена перезагрузка)?
- Изменение нижних элементов
overflow-y
доhidden
через JS устраняет проблему, однако переключениеoverflow
вызывает перерисовку, вызывающую проблемы с производительностью. - Удаление
height: 100%; width: 100%
изhtml, body
также устраняет проблему, однако необходимо установить, чтобы процентные значения работали правильно
Требуется правильное решение/обходное решение для устранения этой проблемы, не вызывая каких-либо проблемных побочных эффектов. Также будет понятно, почему это происходит.