我想在我的应用程序中嵌入一个WKWebView(仅在屏幕的一部分,而不是全屏),并希望用户能够在该部分内滚动webview。但是,我不希望在WKWebView内部进行任何进一步的导航 - 如果用户触摸任何地方(不是滚动),我会启动一个单独的SFSafariViewController。人们可以告诉我们最好的方法是什么?我尝试了以下方法,但每个方法遇到瓶颈:
在调用委托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;
}
我尝试添加(清晰颜色)UIView作为WKWebView的子视图 - 虽然这会阻止网页上的任何用户交互,但也会阻止页面滚动。
最后,我尝试将WKWebView作为UIScrollView的子视图。那不知何故完全消除了这个观点!
感谢您拥有的任何输入......!