iOS 11 UIWebView всплывает в строке состояния

В iOS 11 UIWebView раскрывается в строке состояния. На это может повлиять вставка безопасной области, введенная в iOS 11. Я пытаюсь установить свойство contentInsetAdjustmentBehavior, как показано ниже:

webView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways

Оно работает. Однако для некоторых страниц, использующих -webkit-overflow-scrolling, webView.scrollowView имеет другой UIScrollowView(UIWebOverflowScrollView) в качестве своего подпредставления. Если я не установлю свойство contentInsetAdjustmentBehavior для этого scrollView, элементы страницы опустятся. Если есть какое-либо другое решение этой проблемы без установки свойства contentInsetAdjustmentBehavior для всех scrollView UIWebview.


person Community    schedule 13.08.2017    source источник


Ответы (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 (да, работают только дополнительные SafeAreaInsets rootViewController):

navigationController.additionalSafeAreaInsets = UIEdgeInsetsMake(-20, 0, 0, 0);

или кадр uiWebView:

uiWebView.frame = CGRectMake(0.0, -20, uiWebView.frame.size.width, uiWebView.frame.size.height + 20);
person Community    schedule 31.08.2017

Если вы хотите полностью справиться с этим в HTML и CSS, это возможно.

Во-первых, вам нужно добавить viewport-fit=cover в метатег окна просмотра, чтобы WebView заполнил все пространство экрана за строкой состояния.

Затем, чтобы убедиться, что вы безопасно работаете с iPhone X и его выемкой для динамика/камеры, вам нужно установить отступы для использования одной из новых констант вставки безопасных областей CSS как вверху, так и внизу: т. е. padding-top: constant(safe-area-inset-top);

Я написал немного больше об этих изменениях в области просмотра и новых функциях, таких как константы CSS, добавленные для их поддержки: https://ayogo.com/blog/ios11-viewport/

person dpogue    schedule 13.09.2017

У меня аналогичная проблема. Я устанавливаю свой UICollectionView contentInset до iOS 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);
}
person Gustav Engvall    schedule 22.08.2017