2017-08-13 5 views
2

Dans iOS 11, UIWebView s'affiche par la barre d'état. Elle peut être affectée par zone de sécurité encart introduit par iOS 11. Je tente de définir la propriété contentInsetAdjustmentBehavior comme ci-dessous:iOS 11 UIWebView s'affiche par la barre d'état

webView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways 

Il fonctionne. Cependant, pour certaines pages utilisant -webkit-overflow-scrolling, webView.scrollowView a une autre UIScrollowView (UIWebOverflowScrollView) comme sous-vue. Si je ne définis pas la propriété contentInsetAdjustmentBehavior pour ce scrollView, les éléments de la page vont couler. Si toute autre solution pour ce problème sans définir la propriété contentInsetAdjustmentBehavior pour tous les scrollView de UIWebview.

Répondre

8

En fait, je crée un plein écran webView avec navigationBar caché mais statusBar non caché. Pour WKWebView, Apple a corrigé le bug ici https://github.com/WebKit/webkit/commit/cb45630904c7655cc3fb41cbf89db9badd1ef601 depuis iOS 11 beta 8, donc nous pouvons définir la propriété contentInsetAdjustmentBehavior de wkWebView.scrollview:

wkWebView.scrollowView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever 

Pour UIWebView (Apple a abandonné UIWebView), nous pouvons régler le safearea de UIViewController en définissant la propriété additionalSafeAreaInsets de RootViewController (oui, seuls les additionalSafeAreaInsets de RootViewController fonctionne):

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

ou frame of uiWebView:

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

J'ai un problème similaire. Im mettre mes UICollectionView contentInset iOS avant 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); 

Mon correctif est ce (En gros, si iOS 11 contentInsets de set À ne pas):

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

Si vous voulez gérer cela entièrement en HTML et CSS, c'est possible. Tout d'abord, vous devez ajouter viewport-fit=cover à votre balise META viewport afin que WebView remplisse l'espace plein écran derrière la barre d'état. Ensuite, pour vous assurer que vous manipulez l'iPhone X en toute sécurité et sa zone d'enceinte/caméra crantée, vous devez configurer le padding pour qu'il utilise l'une des nouvelles constantes d'encadrement de zone sécurisée CSS, en haut et en bas. en bas: -à-dire, padding-top: constant(safe-area-inset-top);

je l'ai écrit un peu plus sur ces changements à la fenêtre et les nouvelles fonctionnalités telles que les constantes CSS ajoutées pour les soutenir: https://ayogo.com/blog/ios11-viewport/