Question

J'ai un UIWebView comme vue racine d'un UINavigationController. Lorsqu'une page Web a fini de se charger, je cache la barre de navigation et je cherche un moyen de la montrer. En ce moment, j'essaie de le faire lorsque l'utilisateur appuie sur la barre d'état ( cette approche me semble plus compliquée que ce que je veux).

Pour ce faire, j'obtiens d'abord la scrollView de la webView:

for (id subview in mainWebView.subviews) {
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) {
        ((UIScrollView *)subview).delegate = self;
    }
}

puis j'utilise la méthode des délégués:

-(BOOL) scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    return NO;
}

J'espérais que cela fonctionnerait, mais voici ce qui se passe:

  • La page se charge et la barre de navigation est masquée (c'est bien)
  • J'essaye d'appuyer sur la barre d'état, mais rien ne se passe (c'est mauvais)
  • Je fais défiler vers le bas pour que la vue Web soit "loin" de la barre d'état
  • Sans lâcher la vue Web, je touche la barre d'état avec un autre doigt et ça marche! (c'est bizarre :)

Soooo, une aide à ce sujet? Pourquoi cela se produit-il?

Était-ce utile?

La solution

Je viens de réessayer dans iOS 5.0 et cela semble fonctionner comme prévu:

[self.webView.scrollView setDelegate:self];
[self.webView.scrollView setScrollsToTop:YES];

et ensuite:

-(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
    [self.navigationController setNavigationBarHidden:NO animated:NO];
}

Autres conseils

J'ai eu le même problème.Je l'ai résolu par:

[[[webView subviews] objectAtIndex:0] setScrollsToTop:NO];

Vous pouvez également accéder à la propriété scrollView dans iOS 5 en:

webView.scrollView.scrollsToTop = NO ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top