无需用户交互的可滚动WebView

时间:2016-05-12 23:21:28

标签: ios uiscrollview wkwebview

我想在我的应用程序中嵌入一个WKWebView(仅在屏幕的一部分,而不是全屏),并希望用户能够在该部分内滚动webview。但是,我不希望在WKWebView内部进行任何进一步的导航 - 如果用户触摸任何地方(不是滚动),我会启动一个单独的SFSafariViewController。人们可以告诉我们最好的方法是什么?我尝试了以下方法,但每个方法遇到瓶颈:

  1. 在调用委托didNavigationFinish时,使用一个在值中切换的标志。根据此标志的值,我覆盖decisionPolicyForNavigationAction以允许或取消进一步导航。所以基本上一旦网页最初加载(调用didNavigationFinish),就不允许进一步导航,我启动了SFSafariViewController。然而,这会在使用Javascript的网站或通过Google路由它们的网站上出现问题 - 我为他们创建WKWebView的那一刻,doNavigationFinish被多次调用并且标记值用于折腾。以下代码段...

    - (void)webView:(WKWebView *)webView 
            decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction 
            decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
    {
        if (self.allowFurtherWebViewsNavigation) {
            decisionHandler(WKNavigationActionPolicyAllow);
        }
        else {
            decisionHandler(WKNavigationActionPolicyCancel);
    
            // Using a WKWebView category extension here with associated objects.
            [self launchSafariVCPostTapOnWebView:webView.underlyingURL];
        }
    }
    
    - (void)webView:(WKWebView *)webView 
            didFinishNavigation:(WKNavigation *)navigation
    {    
        self.allowFurtherWebViewsNavigation = NO;
    }
    
  2. 我尝试添加(清晰颜色)UIView作为WKWebView的子视图 - 虽然这会阻止网页上的任何用户交互,但也会阻止页面滚动。

  3. 最后,我尝试将WKWebView作为UIScrollView的子视图。那不知何故完全消除了这个观点!

  4. 感谢您拥有的任何输入......!

0 个答案:

没有答案