Как отключить масштабирование iOS и двойное касание в Nativescript и обычном JS - PullRequest
1 голос
/ 05 мая 2019

Мне не удалось отключить масштабирование на iOS для веб-приложения Nativescript, написанного на простом JS.Кажется, для этого есть решения 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 классов для JS, которые TS каким-то образом получает бесплатно.И стратегия (2), я просто не в своей стихии.

Есть какие-нибудь NativeScripters там?

1 Ответ

1 голос
/ 05 мая 2019

Вы просто должны удалить набор текста из исходного кода, тогда это все просто 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
    });
};

Пример игровой площадки

Примечание: Не забудьте добавить проверку платформы, приложение сломается, если вы запустите этот специфический для iOS код на Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...