如何在Nativescript和纯JS中禁用iOS捏缩放和双击缩放

时间:2019-05-05 15:51:45

标签: javascript ios nativescript zoom pinchzoom

对于使用纯JS编写的Nativescript Web应用程序,无法在iOS上禁用缩放功能没有成功。似乎有TypeScript解决方案,但是我无法在JS中实现相同的策略。

(1)类似,但使用纯JS:https://stackoverflow.com/a/48824238/3340040

NativeScript具有子类化Objective-C类和公开方法的方法:https://docs.nativescript.org/core-concepts/ios-runtime/how-to/ObjC-Subclassing#calling-base-methods-Exposed

...似乎可以通过扩展UIViewController(2):https://stackoverflow.com/a/51229156/3340040

来工作

...但是我对委托人的参与方式感到困惑。

我觉得这两种策略都应该起作用,但是对于(1),我不确定如何将所有这些declare var类转换为TS是免费获得的JS。还有策略(2),我还没做好准备。

那里有NativeScripters吗?

1 个答案:

答案 0 :(得分:1)

您只需要从原始代码中删除键入内容,然后全部使用JavaScript。

let WebView = require("tns-core-modules/ui/web-view").WebView;

WebView.prototype.createNativeView = function () {
    let jScript = `var meta = document.createElement('meta');
    meta.setAttribute('name', 'viewport');
    meta.setAttribute('content', 'initial-scale=1.0 maximum-scale=1.0');
    document.getElementsByTagName('head')[0].appendChild(meta);`;
    const wkUScript = WKUserScript.alloc().initWithSourceInjectionTimeForMainFrameOnly(jScript, WKUserScriptInjectionTime.AtDocumentEnd, true);
    const wkUController = WKUserContentController.new();
    wkUController.addUserScript(wkUScript);
    const configuration = WKWebViewConfiguration.new();
    configuration.userContentController = wkUController;
    configuration.preferences.setValueForKey(
        true,
        "allowFileAccessFromFileURLs"
    );
    return new WKWebView({
        frame: CGRectZero,
        configuration: configuration
    });
};

Playground Sample

注意:请记住,要添加平台检查,如果您在Android上运行此iOS特定代码,则该应用将中断。