iOS 11 UIWebView pop down по строке состояния
В iOS 11 UIWebView открывается по строке состояния. Это могут быть затронуты безопасный внутреннюю область представила на iOS 11. Я пытаюсь установить свойство contentInsetAdjustmentBehavior следующим образом:
webView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways
Это работает. Однако для некоторых страниц используется -webkit-overflow-scrolling, webView.scrollowView имеет другой UIScrollowView (UIWebOverflowScrollView) в качестве своего подвида. Если я не установить contentInsetAdjustmentBehavior собственность на которые представление ScrollView, элементы страницы будут тонуть. Если есть другое решение для этого проблема без установки свойства contentInsetAdjustmentBehavior для всех scrollView UIWebview.
3 ответа:
На самом деле, я создаю полноэкранное веб-представление со скрытой панелью навигации, но не скрытой панелью состояния. Для WKWebView, Apple исправила ошибку здесь https://github.com/WebKit/webkit/commit/cb45630904c7655cc3fb41cbf89db9badd1ef601 начиная с iOS 11 beta 8, поэтому мы можем установить свойство contentInsetAdjustmentBehavior wkWebView.scrollview:
wkWebView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever
Для UIWebView (Apple отказалась от UIWebView) мы можем настроить область безопасности UIViewController, установив свойство additionalSafeAreaInsets rootViewController (да, работает только additionalSafeAreaInsets rootViewController):
navigationController.additionalSafeAreaInsets = UIEdgeInsetsMake(-20, 0, 0, 0);
Или фрейм uiWebView:
uiWebView.frame = CGRectMake(0.0, -20, uiWebView.frame.size.width, uiWebView.frame.size.height + 20);
Если вы хотите обрабатывать это полностью в HTML и CSS, это возможно.
Во-первых, вам нужно добавить
viewport-fit=cover
в мета-тег видового экрана, чтобы WebView заполнял все пространство экрана за строкой состояния.Далее, чтобы убедиться, что вы безопасно управляете iPhone X и его зазубренной областью динамика / камеры, вам нужно настроить заполнение, чтобы использовать одну из новых констант CSS safe-area inset вверху и внизу: то есть,
padding-top: constant(safe-area-inset-top);
Я написал немного больше об этих изменениях в viewport и новые функции, такие как CSS константы, добавленные для их поддержки: https://ayogo.com/blog/ios11-viewport/
У меня аналогичная проблема. Им мой UICollectionView contentInset перед прошивкой 11.
CGFloat topInset = [UIApplication sharedApplication].statusBarFrame.size.height + self.navigationController.navigationBar.frame.size.height; CGFLoat bottomInset = self.tabBarController.tabBar.frame.size.height; self.collectionView.contentInset = UIEdgeInsetsMake(topInset, 0.f, bottomInset, 0.f);
Мое исправление заключается в следующем (в основном, если iOS 11 не устанавливает contentInsets):
if (![self.collectionView respondsToSelector:NSSelectorFromString(@"contentInsetAdjustmentBehavior")]) { CGFloat topInset = [UIApplication sharedApplication].statusBarFrame.size.height + self.navigationController.navigationBar.frame.size.height; CGFLoat bottomInset = self.tabBarController.tabBar.frame.size.height; self.collectionView.contentInset = UIEdgeInsetsMake(topInset, 0.f, bottomInset, 0.f); }