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 était d’afficher l’article dans un UIWebView dans l’en-tête de tableView.

Pour ce faire, je dois obtenir la hauteur du contenu WebView et je dois désactiver le défilement pour la 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:

  touchMove = function(event) { event.preventDefault(); } 

J’ai entendu dire que la première solution est interdite par Apple mais je n’en ai aucune preuve. Mon application sera-t-elle rejetée en utilisant cette solution? Si oui, puis-je utiliser la seconde solution sans être rejetée?

À partir d’iOS5, nous avons un access direct à la vue de défilement de UIWebView.
Vous pouvez désactiver le défilement et les rebonds comme ceci:

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

Comme cette question est toujours applicable, il existe une nouvelle façon de le faire! (iOS 7.0+, peut-être iOS 6, non confirmé)

 webView.scrollView.scrollEnabled = NO; 

Prends soin 🙂

Vous pouvez simplement définir la propriété d’interaction utilisateur de la vue Web sur no

 webView.userInteractionEnabled = NO; 

C’est assez simple et fonctionne bien, merci 🙂

pour toutes les versions d’ios, vous pouvez utiliser ce code à la place de setScrollEnabled:

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

Utilisez celui-ci

Je pense que le javascript

  

est de loin la meilleure solution.

Effectivement :

Votre premier examen, ou le

 [[[WebView subviews] lastObject] setScrollingEnabled:NO]; 

une (même chose) pourrait être rejetée car non documentée, ou vous faire tomber en panne dans une autre mise à jour de ios.

Et le

 [[myWebView scrollView] setBounces:NO]; 

la méthode ne fonctionnera pas avec iOS <5.

Version SWIFT 3

  webView.scrollView.bounces = false webView.scrollView.isScrollEnabled = false 
 [[[WebView subviews] lastObject] setScrollingEnabled:NO]; 

cela a sortingé pour moi

Je ne pense pas que la première option soit interdite par Apple.

Tu pourrais essayer

 [[[Webview subviews] lastObject] setScrollingEnabled:NO]; 

Si vous ne souhaitez pas que des liens fonctionnent dans votre UIWebView, vous pouvez également le faire.

 [myWebView setUserInteractionEnabled:NO]; 

Le premier est rejeté par Apple. Cela m’est arrivé ce matin.

[[myWebView scrollView] setBounces: NO];

Utilise le :

 [[webView scrollView] setBounces:NO]; [[webView scrollView] setScrollingEnabled:NO]; 

Essaye ça,

 [(UIScrollView *)[[webView subviews] lastObject] setScrollEnabled:NO]; 

J’ai placé quelques UIWebView dans un UIScrollView et il ne défilait pas pour moi, sauf si je désactivais l’interaction utilisateur sur les vues Web (même avec [[webview scrollview] setScrollEnabled:NO] ). J’ai donc placé les UIWebView dans un UIView et cela a fonctionné pour moi, mais les liens interactifs ou les divs dans mon HTML dans UIWebView ne fonctionnaient plus.

La seule chose qui a fonctionné pour moi est de conserver UIWebView dans UIScrollView pour que les interactions HTML fonctionnent, mais pas l’ UIScrolling .

J’ai ensuite créé un délégué personnalisé pour les vues Web pour écouter window.open("http:/customEvent") appelé à partir du code HTML contenu dans la vue Web. J’ai également ajouté une détection de balayage JavaScript qui déclenche mon événement personnalisé.

Lorsque le délégué WebView le reçoit, je passe une notification à un contrôleur qui fait défiler dynamicment mon UIScrollView . Évidemment, j’ai dû créer une logique pour surveiller et passer à la page suivante ou précédente. Pas la plus belle solution mais ça marche pour moi.

Essayez ceci dans votre HTML ( )

  

Cela désactivera le défilement sur votre page Web.

(fonctionne sur n’importe quelle page Web, pas seulement UIWebView)

J’avais besoin de désactiver le défilement car le fait de rejeter un clavier personnalisé avait vraiment gâché le défilement avec WebView. Rien d’autre n’a fonctionné et j’ai eu recours à quelque chose comme ceci:

 -(void)viewDidLoad{ [super viewDidLoad]; [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil]; self.webView.scrollView.showsVerticalScrollIndicator = NO; } -(void)observeValueForKeyPath:(NSSsortingng *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){ self.contentOffset = CGPointZero; } } 

Est-ce qu’une UIWebview et une UITableView sur une UIScrollview, et en définissant la hauteur de la vue Web (et en ajoutant au ContentSize total de la vue de défilement), ressemblent à ce que vous voulez?

 [[[WebView subviews] lastObject] setScrollingEnabled:NO];