2016-11-06 12 views
0

Kennt jemand eine schöne einfache Möglichkeit zum Deaktivieren von Doppel-Klick und Pinch-Zoom in einem WKWebView? Nichts, was ich habe versucht, Werke:Zoom in WKWebView deaktivieren?

Webview.scrollView.allowsMagnification = false; // Error: value of type WKWebView has no member allowsMagnification 

Webview.scrollView.isMultipleTouchEnabled = false; // doesn't do anything 

Im html:

<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> // pile of crap, does nothing 

Antwort

10

Sie maximale Skalen in script.Following hinzufügen müssen sollte Code helfen Ihnen

let source: String = "var meta = document.createElement('meta');" + 
      "meta.name = 'viewport';" + 
      "meta.content = 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no';" + 
      "var head = document.getElementsByTagName('head')[0];" + "head.appendChild(meta);"; 
      let script: WKUserScript = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true) 
      let userContentController: WKUserContentController = WKUserContentController() 
      let conf = WKWebViewConfiguration() 
      conf.userContentController = userContentController 
      userContentController.addUserScript(script) 
      let webView = WKWebView(frame: CGRect.zero, configuration: conf) 
+0

Ja, das funktioniert gut. Vielen Dank. –

0

Dieser Beitrag erklären wie man den Zoom verwaltet.

WebKit: New Interaction Behaviors in iOS 10

In iOS 10 "ignoresViewportScaleLimits" Eigenschaft wurde in WKWebView, hinzugefügt, die standardmäßig falsch ist. Der Beitrag empfiehlt, auf true zu setzen und den Zoom auf der Seite korrekt zu verwalten.

Hinweis: In Safari und SafariViewController ist der Wert für diese Eigenschaft standardmäßig true.

In meinem Fall möchte ich in einigen Fällen den Zoom zurücksetzen. Aus diesem Grund war die Änderung der maximalen Skalierung auf 1.0 und danach auf 10.0 die einzige Möglichkeit, die ich gefunden habe.

NSString* js = 
    @"var meta = document.createElement('meta'); " \ 
    "meta.setAttribute('name', 'viewport'); " \ 
    "meta.setAttribute('content', 'width = device-width, initial-scale = 1.0, minimum-scale = 1.0, maximum-scale = 1.0, user-scalable = yes'); " \ 
    "document.getElementsByTagName('head')[0].appendChild(meta)"; 
    [_wkWebview evaluateJavaScript:js completionHandler:^(id _Nullable object, NSError * _Nullable error) { 
     NSString* js = 
     @"var meta = document.createElement('meta'); " \ 
     "meta.setAttribute('name', 'viewport'); " \ 
     "meta.setAttribute('content', 'width = device-width, initial-scale = 1.0, minimum-scale = 1.0, maximum-scale = 10.0, user-scalable = yes'); " \ 
     "document.getElementsByTagName('head')[0].appendChild(meta)"; 
     [_wkWebview evaluateJavaScript:js completionHandler:nil]; 
    }]; 

Dieser Code sollte funktioniert, aber ich empfehle die „Ansichtsfenster“ immer in dem HTML-Code zu erstellen und eine Funktion (dh resetZoom oder disableZoom) in Javascript erstellen aus Objective-C direkt anrufen (es ist sauberer)

Ich hoffe es hilft.

Verwandte Themen