2017-08-13 6 views
2

In iOS 11 wird UIWebView über die Statusleiste angezeigt. Es kann durch den sicheren Bereich Einsatz von iOS eingeführt betroffen sein 11. Ich versuche, die Eigenschaft contentInsetAdjustmentBehavior einzustellen, wie unten:iOS 11 UIWebView erscheint in der Statusleiste

webView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways 

Es funktioniert. Für einige Seiten, die das Webkit-Overflow-Scrolling verwenden, verfügt webView.scrollowView jedoch über eine weitere UIScrollowView (UIWebOverflowScrollView) als Unteransicht. Wenn ich für diese scrollView die Eigenschaft contentInsetAdjustmentBehavior nicht festlege, sinken die Seitenelemente. Wenn es eine andere Lösung für dieses Problem gibt, ohne die Eigenschaft contentInsetAdjustmentBehavior für die gesamte scrollView von UIWebview festzulegen.

Antwort

8

Eigentlich habe ich ein Vollbild webView mit navigationbar versteckt schaffen, sondern statusBar nicht versteckt. Für WKWebView hat Apple den Fehler hier https://github.com/WebKit/webkit/commit/cb45630904c7655cc3fb41cbf89db9badd1ef601 seit iOS 11 Beta 8, so befestigt, dass wir die Eigenschaft contentInsetAdjustmentBehavior von wkWebView.scrollview einstellen:

wkWebView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever 

Für UIWebView (Apple hat aufgegeben UIWebView), können wir einstellen die safearea von UIViewController von der Unterkunft additionalSafeAreaInsets von RootViewController Einstellung (ja, nur die additionalSafeAreaInsets von RootViewController funktioniert):

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

oder Frame von uiWebView:

uiWebView.frame = CGRectMake(0.0, -20, uiWebView.frame.size.width, uiWebView.frame.size.height + 20); 
1

Ich habe ein ähnliches Problem. Im Einstellung meiner UICollectionView contentInset pre 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); 

Meine Lösung ist, diese (Im Grunde genommen, wenn iOS 11 DO NOT Satz 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); 
} 
2

Wenn Sie dies vollständig in HTML und CSS behandeln möchten, ist es möglich.

Zuerst müssen Sie viewport-fit=cover zu Ihrem Viewport-Meta-Tag hinzufügen, damit das WebView den gesamten Bildschirmbereich hinter der Statusleiste ausfüllt.

Um sicherzustellen, dass Sie das iPhone X und seinen gekerbten Lautsprecher-/Kamerabereich sicher handhaben, müssen Sie das Padding so einstellen, dass es oben und unten eine der neuen CSS-Einzugskonstanten für den sicheren Bereich verwendet unten: dh padding-top: constant(safe-area-inset-top);

ich ein bisschen mehr über diese Änderungen an das Ansichtsfenster und die neuen Funktionen wie CSS Konstanten hinzugefügt schrieb, sie zu unterstützen: https://ayogo.com/blog/ios11-viewport/

Verwandte Themen