UIWebView change contentSize sur iOS 7 après être revenu de l'arrière-plan

Le problème:

J'ai un UIWebView entre mon UINavigationBar et UITabBar . Sur iOS 7, lorsque l'application entre en arrière-plan et revient à nouveau, il semble que la propriété contentSize de l' UIWebView change de sorte qu'il y ait un bloc blanc au-dessus.

Après avoir surveillé le contentSize de l' UIWebView , lorsque l'application entre au premier plan (je le vérifie en observant le UIApplicationDidBecomeActiveNotification ), elle a été soustraite de sa hauteur.

Capture d'écran (informations sensibles expurgées): Version expurgée de la capture d'écran

Mes parameters:

J'utilise un UIWebView dans mon UIViewController qui est incorporé dans un UITabBarViewController qui est incorporé dans un UINavigationController . J'utilise Storyboards et avoir "Ajuster les incrustations de vue de défilement", "Redimensionner la vue de NIB" et "étendre les bords sous barres de Tob" sur. Sur l' UIWebView j'ai décoché "Scales Page To Fit". Je ne fais rien dans les methods viewDidAppear ou viewWillAppear . Je l'ai testé sur iOS 6, et le problème ne se pose pas là. De plus, je n'utilise pas la layout automatique.

Code pertinent:

 self.webView.scrollView.scrollEnabled = NO; self.webView.scrollView.bounces = NO; self.webView.scalesPageToFit = NO; 

Après avoir surveillé contentSize & frame dans viewDidAppear & appHasGoneInForeground :

Le cadre passe de 320×455 à 320×455 contentSize va de 320×504 à 320×455

Est-ce que quelqu'un a une idée de ce qui me manque ici et / ou pourquoi cela arrive? Merci pour votre time!

"J'utilise un UIWebView dans mon UIViewController qui est embedded dans un UITabBarViewController qui est embedded dans un UINavigationController".

Ceci n'est pas supporté par Apple. lien

… l'ordre de confinement est important; seules certaines dispositions sont valables. L'ordre de confinement, de l'enfant au parent, est le suivant:

Contrôleurs de vue de contenu et controllers de vue de conteneur qui ont des limites flexibles (telles que le controller de vue de page)

Contrôleur de vue de navigation

Contrôleur de barre d'onglet

Contrôleur de vue partagée

Je voudrais d'abord essayer un arrangement de conteneur plus simple et valide et voir si cela résout le problème. Notez que même si vous résolvez ce problème spécifique, si vous continuez à utiliser votre hiérarchie, vous risquez de rencontrer des problèmes d'interface user inattendus et éventuellement incohérents.

Veuillez essayer self.automaticallyAdjustsScrollViewInsets = NO dans viewController de webView.

automaticallyAdjustsScrollViewInsets est nouvelle propriété dans iOS7 SDK, et la valeur par défaut est YES.It peut ajuster automatiquement scrollView de viewController dans iOS7.Vous pouvez get plus d'informations avec google search.

J'espère que cela peut vous aider.

Vous pouvez définir SetContentSize ou frame sur:

 -(void)viewDidLayoutSubviews 

définir UIWebview dans xib bottomscle

Autorisation

D'autre part, vous pouvez définir

 self.edgesForExtendedLayout=UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars=NO; self.automaticallyAdjustsScrollViewInsets=NO; 

C'est un comportement très étrange. Utilisez-vous AutoLayout? Si tel est le cas, vérifiez que vos contraintes garantissent que les bords de WebView sont toujours égaux aux bords de vue de ViewController.

Si vous n'utilisez pas AutoLayout, définissez le paramètre autoresizingMask de sorte que les espaces de début et de fin soient corrigés:

 webView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 

Si cela ne fonctionne pas, vous pouvez append une solution de piratage / contournement en utilisant KVO (veuillez ne l'utiliser qu'en dernier recours, car ce n'est pas une bonne pratique):

 [view addObserver:self forKeyPath:@"contentSize" options:0 context:NULL]; 

Ensuite, implémentez la méthode

 - (void) observeValueForKeyPath:(NSSsortingng *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

et redéfinissez contentSize sur ce qu'il devrait être.

Vous pouvez essayer ce code (je sais, c'est dangereux)

 -(void)webViewDidFinishLoad:(UIWebView *)webView { if(self.navigationController.navigationBar.translucent == YES) { _webView.scrollView.contentOffset = CGPointMake(_webView.frame.origin.x, _webView.frame.origin.y - 54); } } 

Le numéro après le _webView.frame.origin.y

Salut mate s'il vous plaît voir l'image qui vous aiderait.

Lorsque vous avez UIWebview ou tableview, vérifiez la direction du redimensionnement automatique à droite de l'UIwebview (onglet Inspecteur de taille) entrez la description de l'image ici

Et aussi vous devez mentionner le Delta Y à -20 et Delta Hauteur à 20 qui est pour iOS 7