我知道这看起来像一个简单的问题,可以简单地说:
webview.scrollView.scrollEnabled = NO;
webview.scrollView.panGestureRecognizer.enabled = NO;
webview.scrollView.bounces = NO;
Run Code Online (Sandbox Code Playgroud)
甚至
for (UIView* subview in webview.subviews) {
if ([subview respondsToSelector:@selector(setScrollEnabled:)]) {
[(id)subview setScrollEnabled:enabled];
}
if ([subview respondsToSelector:@selector(panGestureRecognizer)]) {
[[(id)subview panGestureRecognizer] setEnabled:enabled];
}
}
Run Code Online (Sandbox Code Playgroud)
虽然它确实防止了contentOffset内部的scolling(在意义上),但WKWebview它并没有阻止它接收涉及滚动的平移手势事件.
因此,当用户向左或向右滚动时,包含javascript以自动更改文章的Huffington Post的文章仍然会得到该行为.
我怎么能阻止这个?
Bor*_*zin 34
在Swift之前3
您可以简单地禁用其隐式scrollView上的滚动
webView.scrollView.scrollEnabled = false
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
webView.scrollView.isScrollEnabled = false
Run Code Online (Sandbox Code Playgroud)
我花了一段时间,但我找到了一种方法.
我不得不在私人子视图中删除私人手势识别器WKWebView.
我有一个类别WKWebView:
@implementation WKWebView (Scrolling)
- (void)setScrollEnabled:(BOOL)enabled {
self.scrollView.scrollEnabled = enabled;
self.scrollView.panGestureRecognizer.enabled = enabled;
self.scrollView.bounces = enabled;
// There is one subview as of iOS 8.1 of class WKScrollView
for (UIView* subview in self.subviews) {
if ([subview respondsToSelector:@selector(setScrollEnabled:)]) {
[(id)subview setScrollEnabled:enabled];
}
if ([subview respondsToSelector:@selector(setBounces:)]) {
[(id)subview setBounces:enabled];
}
if ([subview respondsToSelector:@selector(panGestureRecognizer)]) {
[[(id)subview panGestureRecognizer] setEnabled:enabled];
}
// here comes the tricky part, desabling
for (UIView* subScrollView in subview.subviews) {
if ([subScrollView isKindOfClass:NSClassFromString(@"WKContentView")]) {
for (id gesture in [subScrollView gestureRecognizers]) {
if ([gesture isKindOfClass:NSClassFromString(@"UIWebTouchEventsGestureRecognizer")])
[subScrollView removeGestureRecognizer:gesture];
}
}
}
}
}
@end
Run Code Online (Sandbox Code Playgroud)
希望有一天能帮到任何人.
致谢,非常感谢apouche提供的Obj-C代码。如果其他人有相同的问题,这是适用于Swift 2的工作解决方案
extension WKWebView {
func setScrollEnabled(enabled: Bool) {
self.scrollView.scrollEnabled = enabled
self.scrollView.panGestureRecognizer.enabled = enabled
self.scrollView.bounces = enabled
for subview in self.subviews {
if let subview = subview as? UIScrollView {
subview.scrollEnabled = enabled
subview.bounces = enabled
subview.panGestureRecognizer.enabled = enabled
}
for subScrollView in subview.subviews {
if subScrollView.dynamicType == NSClassFromString("WKContentView")! {
for gesture in subScrollView.gestureRecognizers! {
subScrollView.removeGestureRecognizer(gesture)
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
3CC*_*3CC -1
尝试以这种方式禁用scrollView缩放:
CGFloat zoomScale = webview.scrollView.zoomScale;
webview.scrollView.maximumZoomScale = zoomScale;
webview.scrollView.minimumZoomScale = zoomScale;
Run Code Online (Sandbox Code Playgroud)