92 votes

Désactiver le défilement sur un UIWebView autorisé ?

Je dois montrer un article web avec un UITableView sous l'article.

La seule option que j'ai trouvée est d'afficher l'article dans un fichier UIWebView dans l'en-tête du tableView.

Pour ce faire, je dois obtenir la hauteur du contenu du webView et je dois désactiver le défilement pour le webView.

J'ai trouvé deux solutions pour désactiver le défilement :

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

ou en JavaScript :

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

J'ai entendu dire que la première solution est interdite par Apple mais je n'en ai pas la preuve. Ma demande sera-t-elle rejetée si j'utilise cette solution ? Si oui, puis-je utiliser la deuxième solution sans être rejeté ?

299voto

Artanis Points 3364

Depuis iOS5, nous avons un accès direct au scrollview de l'UIWebView.
Vous pouvez désactiver le défilement et les rebonds comme ceci :

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

3 votes

Merci beaucoup, c'est exactement ce que je cherchais. @jsddour, vous devriez marquer cette réponse comme acceptée !

0 votes

Pour une raison quelconque, cela ne fonctionne pas pour moi :-( J'ai mis un ScrollView et j'ai mis un UIWebView dedans. Puis j'ai défini les 2 lignes ci-dessus dans la méthode viewWillAppear. Mais le défilement fonctionne toujours dans la vue Web. Quelqu'un peut-il m'aider ? Juste pour information, je l'exécute dans le simulateur iOS 7.

0 votes

À quoi cela sert-il webView.scrollView.bounces = NO; ? puisque le code de la première ligne a désactivé le défilement.

26voto

Ryan Copley Points 415

Puisque cette question est toujours d'actualité, il existe une nouvelle façon de procéder ! (iOS 7.0+, peut-être aussi iOS 6, non confirmé)

webView.scrollView.scrollEnabled = NO;

Prenez soin de vous :)

0 votes

Ce que je ne comprends pas, c'est pourquoi ce n'est pas dans IB :/, allez APPLE qu'est-ce que vous faites ! Très bonne solution néanmoins !

20voto

Eshwar Chaitanya Points 433

Vous pouvez simplement définir la propriété d'interaction avec l'utilisateur de la vue Web comme étant nulle, c'est-à-dire que vous ne pouvez pas l'utiliser.

webView.userInteractionEnabled = NO;

C'est assez simple et ça marche bien, merci :)

29 votes

Cependant, cela empêche les liens d'être exploités.

0 votes

@GrahamPerks J'ai modifié la réponse en fonction de votre commentaire, merci de l'examiner et de l'approuver, merci :)

12voto

mturhan55 Points 141

Pour toutes les versions d'ios vous pouvez utiliser ce code au lieu de setScrollEnabled :

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

0 votes

Tout d'abord, j'ai essayé la méthode "setScrollEnabled" et apple a rejeté mon ipa. Ensuite, j'ai changé cette méthode et elle a été acceptée.

12voto

gobi Points 451

Utilisez celui-ci <body ontouchmove="event.preventDefault()">

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X