防止 Angular NativeScript WebView 通过捏合缩放进行缩放

2024-03-31

所以我有一个使用 Angular (NG 5.1.1 / Angular 7.x) 的 Nativescript 应用程序

我有一个带有网络视图的视图。

    @ViewChild("myWebView") webViewRef: ElementRef;

    <WebView class="webview" #myWebView [src]="myURL"></WebView>

在我的 webview.component.ts 中我有这个。

ngAfterViewInit(): void {
    const webview: WebView = this.webViewRef.nativeElement;

    webview.on(WebView.loadFinishedEvent, (args: LoadEventData) => {
        this.setIndicatorFalse();
        if (webview.ios) {
            webview.ios.scrollView.delegate = UIScrollViewDelegateZ.new();
            webview.ios.scrollView.minimumZoomScale = 1;
            webview.ios.scrollView.maximumZoomScale = 1;
        }
    });
    webview.on(WebView.loadStartedEvent, (args: LoadEventData) => {
        if (webview.android) {
            webview.android.getSettings().setBuiltInZoomControls(false);
            webview.android.getSettings().setDisplayZoomControls(false);
        } else {
            // @ts-ignore
            webview.ios.multipleTouchEnabled = false;
            webview.ios.scalesPageToFit = false;
            webview.ios.scrollView.bounces = false;
            webview.ios.scrollView.showsHorizontalScrollIndicator = true;
            webview.ios.scrollView.showsVerticalScrollIndicator = true;
            webview.ios.opaque = false;
            webview.ios.scrollView.allowsInlineMediaPlayback = true;
            webview.ios.scrollView.mediaPlaybackRequiresUserAction = false;
        }
    });
}

正如你所看到的,我尝试了各种方法来让这个网络视图不缩放。

我正在重写我的 ViewDelegate

webview.ios.scrollView.delegate = UIScrollViewDelegateZ.new();

该文件在这里

export class UIScrollViewDelegateZ extends NSObject implements UIScrollViewDelegate {

public static ObjCProtocols = [UIScrollViewDelegate];

static new(): UIScrollViewDelegateZ {
    console.log("here we are");

    return <UIScrollViewDelegateZ>super.new();
}

viewForZoomingInScrollView(scrollView: UIScrollView): UIView {
    console.log("viewForZoomingInScrollView");

    return null;
}

scrollViewDidScroll(scrollView: UIScrollView): void {
    console.log("scrollViewDidZoom");

    return null;
}

scrollViewWillBeginZoomingWithView(scrollView: UIScrollView, view: UIView): void {
    console.log("scrollViewWillBeginZoomingWithView   " + scrollView);

    return null;
    }
}

当我加载网络视图并捏缩放时,我的控制台日志显示:

 CONSOLE LOG file:///app/app/webview/scrollDelegate.js:9:20: here we are
 CONSOLE LOG file:///app/app/webview/scrollDelegate.js:21:20: scrollViewWillBeginZoomingWithView   <WKScrollView: 0x7fb140afe000; baseClass = UIScrollView; frame = (0 0; 375 603); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x600000ab2100>; layer = <CALayer: 0x600000537480>; contentOffset: {0, 0}; contentSize: {375, 1916}; adjustedContentInset: {0, 0, 0, 0}>
 CONSOLE LOG file:///app/app/webview/scrollDelegate.js:17:20: scrollViewDidZoom

所以我觉得我很接近?但我就是无法让它走?我想我应该在尝试捏缩放时返回 null / undefined ?这是其他一些答案/网络所说的,但没有任何效果。

HTML 页面还具有正确的元标记标头...

  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0, minimal-ui"/>

任何帮助,将不胜感激!谢谢!!


您必须覆盖 tns-core-modules 设置的默认元数据。

import { WebView } from 'tns-core-modules/ui/web-view';

declare var WKUserScript, WKUserScriptInjectionTime, WKUserContentController, WKWebViewConfiguration, WKWebView, CGRectZero;

(<any>WebView.prototype).createNativeView = function () {
    const 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
    });
};

这里有一个,由于您使用的是 Angular,您可以将以上行添加到您的app.component.ts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 Angular NativeScript WebView 通过捏合缩放进行缩放 的相关文章

  • 跨延迟加载路由创建共享模块

    我正在构建一个 Angular 11 应用程序并尝试创建一个SharedModule 我正在使用延迟加载 并希望避免在延迟加载的路由中多次加载公共模块 我创建了一个共享模块并将其导入到我的AppModule 根据我的理解 这个共享模块应该在
  • 在 iOS 8 中创建通话/双高状态栏?

    是否有调用自定义通话 双高状态栏的标准方法 如果没有 那么构建我自己的功能的最佳起点是哪里 我知道关于如何做到这一点存在一些多年的问题 但没有任何令人满意的答案 有什么新方法可以做到这一点吗 可能在 iOS 8 中 这里没有什么新鲜事 但我
  • 不同事件的角度停止传播

    在我的 Angular 4 应用程序中 我有一个带有 dblclick 处理程序的父组件和一个带有 click 处理程序的子组件 组件 html
  • 如何在使用可观察对象作为数据源的同时使角度数据表更新行、结果数和分页

    我正在尝试在我的 Angular 7 应用程序中使用 Angular Datatables 作为显示搜索结果的组件 请求创建组件创建一个搜索表单 当单击提交按钮时 使用请求服务将 http Post 请求发送到后端 然后请求创建组件更新请求
  • Cordova iOS 启动画面

    我无法让闪屏停留在页面加载之前 我已经阅读了谷歌搜索第一页 第二页和第三页中的所有条目 我阅读了 stackoverflow 上发布的所有问题 包括一个很好的解释 https stackoverflow com questions 1800
  • Mapkit 在 IOS 13 中使用过多的 CPU

    最近 在一些用户更新到 iOS 13 x 后 我的 iOS 应用程序开始频繁崩溃 在 iOS 12 x 中没有出现该问题 我正在使用 Mapkit 渲染一些 MKPolygons 和 MKPolylines MKPolylines 被删除并
  • 如何在 iOS 中设置视图的最大宽度?

    我的应用程序有一个基本的登录屏幕 一个外框以及其中的一些文本字段和按钮 我将框设置为填满屏幕 然而 在某些设备上这个盒子会太大 如何设置视图的最大宽度和高度 您可以使用自动布局约束 使框适应屏幕尺寸 但不超过给定的宽度和高度 为此 请对宽度
  • 从 plist 文件中解码数据

    我丢失了在 Macbook Air 上用 Textwrangler 编写的文本文件中的一些数据 我在扩展名为 plist 的文件中找到了其中一些 文件是用 xml 编写的 如下所示
  • Angular 9:上传图像时如何将 HEIF 文件格式转换为已知的 Web 格式

    我正在维护一个用 Angular 9 编写的 Web 应用程序 PWA 用户可以在 Cropperjs 中上传图像并裁剪 旋转等 在 iOS 上 新的图像格式 HEIF 正在成为标准 这些用 户抱怨他们无法上传照片 似乎iOS有时会自动转换
  • 将 UIRefreshControl 用于 UIWebView

    我在 iOS 6 中看到了 UIRefreshControl 我的问题是是否可以通过下拉来刷新 WebView 而不是像在邮件中那样让它弹出 我使用 rabih 的代码是 WebView UIRefreshControl refreshCo
  • Swift 3 中数组的 indexOf(_:) 方法的替换

    在我的项目 用 Swift 3 编写 中 我想使用从数组中检索元素的索引indexOf 方法 存在于 Swift 2 2 中 但我找不到任何替代方法 Swift 3 中是否有任何好的替代方法或类似的方法 Update 我忘记提及我想在自定义
  • Angular2 与 Jquery-ui 滑块

    我尝试将 Jquery ui 滑块与 angular2 一起使用 我想让变量 slideValue 显示滑块的值 但我不知道如何将我的模型或变量从角度绑定到滑块 这是我的滑块组件 import Component ElementRef In
  • MatAutocomplete 值 X 显示

    我的自动完成显示具有以下定义的对象的值 export class Person id number name string cityName string 这是自动完成模板
  • Angular2:鼠标事件处理(相对于当前位置的移动)

    我的用户应该能够通过鼠标在画布中移动 或旋转 对象 当鼠标事件发生时 屏幕坐标用于计算与最后一个事件的增量 方向和长度 没什么特别的 mousedown 获取第一个坐标 mousemove 获取第n个坐标 计算deltaXY 按deltaX
  • 如何避免 NSNumberFormatter 中的四舍五入

    我试图拥有一个最大精度为 2 位小数的数字字符串 而其余小数只是被修剪掉而不是四舍五入 例如 I have 123456 9964 I want 123456 99 gt Just want to trim rest of the deci
  • 如何使用 Angular 2 动画实现翻转效果?

    我一直在我的项目中使用纯CSS翻转卡片 但这个解决方案不是合适的 有人可以通过点击按钮来呈现角度 2 的翻转吗 我在 angularjs 中找到了一个https codepen io Zbeyer pen oXQrZg https code
  • 在 Angular 9 应用程序的生产中同时使用 AOT 和 JIT

    因此 我一直在构建一个 Angular 9 应用程序 其中有一个客户仪表板来管理保存在服务器上的模板 这些模板可以通过激活系统在不同的设备上查看 因此设备与用户绑定 所以让我们说https templates com我们有 login da
  • 在停止调试时终止 VS Code 中的 ng 服务任务

    我有一个 Angular 项目 目前正在通过 chrome 调试器在 vs code 内进行调试 我的launch json uses preLaunchTask serve 其中服务定义于tasks json as ng serve 这样
  • Angular - 为每个请求设置标头

    我需要在用户登录后为每个后续请求设置一些授权标头 要为特定请求设置标头 import Headers from angular2 http var headers new Headers headers append headerName
  • Windows 10 中的 npm 安装错误( npm install -g angular-cli )

    node v v4 5 0 npm v 5 0 1 有人在 Windows 10 中安装 angular cli 时遇到过这种问题吗 请尝试以下操作 step 0 运行这个命令 npm uninstall g angular cli npm

随机推荐