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 3

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);
}