Désactiver le grossissement geste dans WKWebView
Je suis à la recherche d'un moyen de désactiver le "pincer pour zoomer" grossissement geste sur l'iOS mise en œuvre de WKWebView. Il y a un grossissement BOOL propriété disponible pour OS X, mais il ne semble pas être disponible sur iOS.
WKWebView.h
#if !TARGET_OS_IPHONE
/* @abstract A Boolean value indicating whether magnify gestures will
change the web view's magnification.
@discussion It is possible to set the magnification property even if
allowsMagnification is set to NO.
The default value is NO.
*/
@property (nonatomic) BOOL allowsMagnification;
J'ai, aussi, essayé de regarder les WKWebView le geste de modules de reconnaissance, mais qui semble être le tournant d'un tableau vide. Je suis en supposant que le réel modules de reconnaissance sont bured plus profondément dans le composant de la structure (assez complexe, par les regards de celui-ci) et préfère ne pas aller creuser pour eux si possible.
Je sais de possible hacks qui pourrait désactiver le geste de tir (de manière sélective en passant gestes de la WebView, ajouter la vue enfant à la capture geste de pincement, etc) mais j'ai toujours trouvé ces introduire le décalage dans l'événement et souhaitez conserver la mise en œuvre propre/hack gratuit que possible.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez empêcher les utilisateurs de zoomer en définissant le délégué de votre WKWebKit de UIScrollView et la mise en œuvre de
viewForZooming(in:)
comme dans l'exemple suivant:UIScrollViewDelegate
, ensemblewebView.scrollView.delegate = self;
et d'annuler le délégué pointeur dansdeinit
.La réponse ci-dessous ne fonctionne plus sous iOS 10 beta.
WKWebView semble à l'égard de la fenêtre d'affichage de la balise meta de la même façon Mobile Safari est le cas (comme attendu). Donc, j'ai trouvé l'injection de cette balise dans le DOM à l'aide de javascript après un chargement de la page est le tour est joué. Je serais fatigué de cette solution, sauf si vous savez exactement ce que le HTML est chargé dans la webview, sinon je pense qu'elle aurait des conséquences inattendues. Dans mon cas, je suis de chargement chaînes HTML, si je peux juste ajouter à l'HTML, j'ai navire avec l'application.
De le faire de façon générique pour n'importe quelle page web:
Il pourrait être sage de prendre un coup d'oeil à ce genre de navigation vient d'être terminé, puisque seule une nouvelle page aurez besoin de ce code javascript exécuté.
minimum-scale=1.0
doit être réglé pour éviter cela.J'ai essayé de réglage
minimumZoomScale
etmaximumZoomScale
propriétés deUIScrollView
à1
ouisMultipleTouchEnabled
propriété deUIView
àfalse
ou le retour denil
d'invoquerviewForZooming(in:)
deUIScrollViewDelegate
mais aucune n'a fonctionné. Dans mon cas, après plusieurs essais et erreurs, les ouvrages suivants, dans mon cas [Testé sur iOS 10.3]:nil
à déléguer, à l'échelle de ma page est erronée.Le natif de solutions n'étaient pas de travail pour moi, et l'injection de JS n'est pas l'idéal. J'ai remarqué que lorsqu'un zoom est effectué et mon délégué est appelé, le pinchGestureRecognizer est activé même si j'ai désactivé lors de l'initialisation de la webview. Pour résoudre ce problème, je l'ai mis à désactivés lorsqu'un zoom commence:
Plein Swift 3 /iOS 10 version de Campagne réponse:
De travail complet code pour désactiver le zoom dans WkWebView dans swift
importation UIKit
importation WebKit
classe ViewController: UIViewController, WKUIDelegate {
}
Vous pouvez utiliser UIScrollViewDelegate pour cela. D'abord attribuer délégué à votre webview dans le viewDidLoad() ou toute autre méthode appropriée, comme:
Dans le cas où vous affichez un html en local vous pouvez simplement modifier ce code html et de mettre cette balise meta dans votre code html:
Swift 2.0
c'est comment j'ai désactivé le zoom pour Swift3 - vue-contrôleur pour une webview seule application
Je n'ai pas assez de réputation pour ajouter des commentaires aux réponses, mais je voulais mentionner que Kevin est solution de (méta viewport) ne fonctionne plus sous iOS 10 beta. Campagne de la solution est de travailler pour moi, si!
Ah, Kevin, je voudrais que l'ont été la façon dont ces choses fonctionnent.
Plus ici: https://stackoverflow.com/a/37859168/1389714
Si ce n'est pas important pour vous de gérer les relations à l'intérieur du html (dites que vous voulez afficher du texte seulement) le plus simple serait de désactiver l'interaction de l'utilisateur
webView.userInteractionEnabled = false
Désactiver le double tap pour zoomer geste par exiger l'échec du geste de reconnaissance. Elle permettra d'éviter le navigateur pour effectuer une action lorsque l'utilisateur double-tap.
HTML:
Un moyen simple d'éviter le zoom
Nous avons besoin de changer de déléguer l'appel à signatures suivantes dans XCode 8:
remplacer func viewForZooming(dans le scrollView: UIScrollView) -> UIView? {
retour néant
}
Si la webview est l'utilisateur en lecture seule, j'.e, juste pour l'affichage du contenu web utiliser
webView.isUserInteractionEnabled = false
Par ce le geste de zoom ne fonctionne pas sur elle.
Voici une version légèrement modifiée de Gulshan Kumar's réponse qui a fonctionné pour moi dans iOS 12.1.2, et il empêche également le zoom grâce à un double-tap et de la rotation. Dans mon exemple, je viens d'injecter le script directement dans la vue web. J'ai ajusté la balance à 60%, et il n'y a pas besoin d'utiliser la concaténation dans la construction de la chaîne source.
Si c'est mieux d'disbaled la Pincée de zoom lorsque la page web à la fin du chargement, et il peut également spécifier les URL particulière va être disbaled
L'application, j'ai du travail sur la vue agrandie par Javascript. La accepté de répondre à bloqué le zoom par du JavaScript à partir de l'intérieur de la page.
J'ai seulement besoin de désactiver le geste de pincement par l'utilisateur de l'application. La seule solution que j'ai trouvé est de désactiver le geste de la vue web une fois la page chargée:
Cela a fonctionné pour moi. https://gist.github.com/paulofierro/5b642dcde5ee9e86a130