限制WKWebView内容中的可滚动区域

时间:2015-10-24 18:35:06

标签: ios wkwebview

更新

我进行了进一步的实验,结果发现,我错误地认为适用于UIWebView的解决方案。我测试了它,但我觉得看起来不够近。在思考了matt的评论并重新阅读我发现/提到的“解决方案”之后,我发现他们并没有谈论网页浏览。我已经破解了一个将UIWebView嵌入我UIScrollView内部的解决方案。然后我通过将其内容大小和帧设置为整个HTML文档的大小来“禁用”UIWebView的scrollview。此方法适用于UIWebViewWKWebView。一旦我清理完解决方案,我就会回来更新。

原件:

我正在开发一个用于阅读HTML内容的WKWebView iOS应用。 有时我需要能够限制在网络内容的某个部分内滚动。例如,说网络内容是垂直10,000点,我想限制在5,000到8,000之间滚动。我总是显示全宽。

我发现此解决方案适用于UIWebView https://stackoverflow.com/a/3973649

解决方案建议将webview.scrollView.contentSize设置为:

CGSize desiredContentSize = CGSizeMake(self.webView.scrollView.contentSize.width,
                                       8000-5000);
self.webView.scrollView.contentSize = desiredContentSize;

并将webview.scrollView.frame的原点调整为-5000;

CGRect scrollFrame;
scrollFrame.origin = CGPointMake(0, -5000);
scrollFrame.size = self.webView.frame.size;
self.webView.scrollView.frame = scrollFrame;

我发现这适用于UIWebView,但是 它不适用于WKWebView。< / strong>使用WKWebView,我注意到每次用户滚动或JavaScript更新内容时,scrollView的contentSize会自动重置以适合内容。 UIWebView没有发生这种情况。

我发现我可以“强制”使用我想要的contentSize来“坚持”这个解决方案:https://stackoverflow.com/a/8214325/3352624

不幸的是,当我到达可视区域的顶部和底部时,这会导致抖动。使用这种KVO方法是我注意到WKWebView如此频繁地重置它的contentSize。

如何限制WKWebView的可滚动区域?有没有一种方法可以阻止更改contentSize?

对于它的价值,在这种情况下,HTML内容是来自内部API的受控内容。唯一的javascript运行是我自己的。我的目标是iOS 8和9。

1 个答案:

答案 0 :(得分:0)

如果你想限制wkwebview中的可滚动区域不是一个好主意,试着改变web视图的内容插入或框架(最差),以及...... javascript注入解决方案可能无效。

因为网页视图的平滑滚动的秘密在于它加载了整个身体,这使您可以通过包含在Web视图中的子视图的本机滚动视图来探索这个完整的身体,让您看到完整的身体部分这与Web视图大小成比例(它比使用更好,例如,注入容器并在#34中滚动溢出样式;滚动&#34;)。

根据最后的解释和你的例子:

&#34;我正在开发一个具有WKWebView的iOS应用程序,用于阅读HTML内容。有时我需要能够限制在Web内容的某个部分内滚动。例如,说网络内容是垂直10,000点,我想限制在5,000到8,000之间滚动。我总是显示全宽。&#34;

解决方案将是:

CGFloat topScrollLimit = 5000, bottomScrollLimit = 8000;
CGFloat contentHeight = myWebView.scrollView.contentSize.height; //10000
myWebView.scrollView.contentInset = UIEdgeInsetsMake(topScrollLimit*-1.0f, 0, (contentHeight-bottomScrollLimit)*-1.0f, 0);

此外,如果您想要阻止滚动手势超出限制的边缘,您可以添加以下行:

myWebView.scrollView.bounces = NO;

对于范围较小或内容小于Web视图高度的其他示例,您可能必须减少Web视图高度。