2015-02-20 8 views
8

मैं यह एक सरल प्रश्न की तरह दिखता है एक को बोल सकते हैं पता है:पूरी तरह से WKWebView में स्क्रॉलिंग को अक्षम कैसे करें?

webview.scrollView.scrollEnabled = NO; 
webview.scrollView.panGestureRecognizer.enabled = NO; 
webview.scrollView.bounces = NO; 

या यहाँ तक कि

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]; 
    } 
} 

लेकिन यह (contentOffset अर्थ में) scolling रोकने करता है, जबकि अंदर WKWebview यह नहीं करता ' टी स्क्रॉलिंग से जुड़े पैन इशारा घटनाओं को प्राप्त करने से रोकें।

तो हफ़िंगटन पोस्ट की तरह लेख, जिसमें जावास्क्रिप्ट को स्वचालित रूप से लेखों को बदलने के लिए शामिल किया गया है जब उपयोगकर्ता बाएं या दाएं स्क्रॉल करता है तब भी वह व्यवहार प्राप्त होता है।

मैं इसे कैसे रोक सकता हूं?

उत्तर

0

इस तरह से scrollview ज़ूम निष्क्रिय करने के लिए प्रयास करें:

CGFloat zoomScale = webview.scrollView.zoomScale; 
webview.scrollView.maximumZoomScale = zoomScale; 
webview.scrollView.minimumZoomScale = zoomScale; 
4

मुझे एक समय लगा, लेकिन मैं ऐसा करने का एक तरीका खोज निकाला।

मुझे 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 

आशा इस मदद करता है कुछ दिन किसी को भी।

0

यहाँ एक तेज संस्करण है, तो किसी को अब भी Obj सी कोड के लिए apouche इस समस्या

let subviews = self.theWebView.scrollView.subviews 
    for subview in subviews{ 
     if(subview.isKindOfClass(NSClassFromString("WKContentView"))){ 
       if let recognizers = subview.gestureRecognizers { 
        for recognizer in recognizers! { 
         if recognizer.isKindOfClass(NSClassFromString("UIWebTouchEventsGestureRecognizer")){ 
          subview.removeGestureRecognizer(recognizer as! UIGestureRecognizer) 
         } 
        } 
       } 
      } 
     } 
2

क्रेडिट और बहुत धन्यवाद के साथ समस्या हो रहा है। में मामला किसी और एक ही समस्या है, यहाँ काम कर समाधान स्विफ्ट 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) 
       } 
      } 
     } 
    } 
    } 
} 
18

के लिए अनुकूलित किया है आप अपने निहित scrollview

webView.scrollView.scrollEnabled = false 

और यह काम करता है पर बस अक्षम स्क्रॉल कर सकते हैं। देखा ...

+3

स्विफ्ट 3 में यह मेरे लिए काम किया: 'webView.scrollView.isScrollEnabled = झूठा' – Jonathan

0

अंत में self.webView.scrollView.userInteractionEnabled = नहीं

+0

यह क्लिक जैसे स्पर्श ईवेंट को भी रोकता है। –

0

यहाँ एक स्विफ्ट 3 संस्करण है:

extension WKWebView { 

    func setScrollEnabled(enabled: Bool) { 
     self.scrollView.isScrollEnabled = enabled 
     self.scrollView.panGestureRecognizer.isEnabled = enabled 
     self.scrollView.bounces = enabled 

     for subview in self.subviews { 
      if let subview = subview as? UIScrollView { 
       subview.isScrollEnabled = enabled 
       subview.bounces = enabled 
       subview.panGestureRecognizer.isEnabled = enabled 
      } 

      for subScrollView in subview.subviews { 
       if type(of: subScrollView) == NSClassFromString("WKContentView")! { 
        for gesture in subScrollView.gestureRecognizers! { 
         subScrollView.removeGestureRecognizer(gesture) 
        } 
       } 
      } 
     } 
    } 
} 
संबंधित मुद्दे