- Проблема
Тестирование в разных средах показывает, что проблема появляется только в SFSafariView и исходное приложение Safari не заражено.И это только появляется в iPhone с надписью в портретном режиме, когда пользователь обогащает конец страницы и прокручивает снова;Таким образом, страница должна подняться вверх, и панель навигации снова появится автоматически, и произойдет конфликт.
iPhone 8 - Нижняя часть страницы - Портрет ( OK )
iPhone XR - внизу страницы - Портрет ( НЕ ОК )
iPhoneXR - внизу страницы - портрет ( OK )
iPad Pro 9.7 - внизу страницы - альбомная ( OK )
В некоторых случаях это может не быть ошибкой SFSafaryViewController
.
- Итак, если у вас есть доступ к фронтальным разработчикам сайта, который вы хотите встроить в
SFSafaryViewController
, представьте им следующее:
- Безопасная область Inset
Поэтому, чтобы решить эту проблему, Apple реализовала новый safe-area-inset , предварительно определенный набор из 4 констант и новую функцию CSS под названием constant()
.Предопределенные константы безопасной зоны: safe-area-inset-top
, safe-area-inset-right
, safe-area-inset-bottom
и save-area-inset-left
.Когда вы объединяете все четыре из этих констант, вы можете ссылаться на текущий размер вставки безопасной области с каждой стороны.constant()
работает везде, где var()
работает.
Существует множество сайтов, которые показывают, как перенести веб-страницу на iPhone X. Вот один из них .
Возможно, они могли бы попытаться поместить div вне прокручиваемой части и зафиксировать положение.Так что если у вас есть код, где он прокручивается:
<div id="scroll-container">
<div id="scrollable">
</div>
<div>
Такой, где любой элемент в контейнере прокрутки div, он будет прокручивать.
Если они поместят его за пределы прокручиваемой части:
<div id="scroll-container">
<div>
<div id="not-scrollable">
</div>
и поставить position:fixed
;или position:absolute
;или position: sticky
или device-fixed
;или т. д. в CSS для #not-scrollable
, он не должен прокручиваться.
Так что, если у вас нет доступа к внешним разработчикам изСайт, который вы хотите встроить в SFSafaryViewController
, попробуйте следующее ( Не рекомендуется ):
- Попробуйте включить barCollapsing
safaryViewController.configuration.barCollapsingEnabled = false
- или попробуйте встроить его в navigationController и избавиться от заголовка SFView
- или использовать "Реализовать полный экран
WKWebView
с контроллером вместо SFSafaryViewController.
Примечание (для тех, кто возится с панелью инструментов)
- Вы можете использовать методы делегата, чтобы определить состояние загрузки и загрузки веб-страницы и включить / отключить ее дляобойти ошибку инициализации макета страницы.(Вы также можете использовать ручную задержку)
- Вы можете использовать частные API, чтобы скрыть или показать нижнюю панель инструментов.Но это не является предпочтительным, и он будет отклонен из Apple AppStore.