UIWebView पर स्क्रॉल करने की अनुमति दें?


90

मुझे एक लेख के UITableViewतहत एक वेब लेख दिखाना है ।

एकमात्र विकल्प जो मुझे मिला वह था UIWebViewतालिका के शीर्ष लेख में लेख प्रदर्शित करना ।

ऐसा करने के लिए मुझे webView सामग्री की ऊँचाई प्राप्त करनी होगी और मुझे webView के लिए स्क्रॉलिंग को अक्षम करना होगा।

स्क्रॉलिंग को अक्षम करने के लिए मुझे दो समाधान मिले:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

या जावास्क्रिप्ट में:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

मैंने सुना है कि पहला समाधान Apple द्वारा निषिद्ध है, लेकिन मेरे पास इसका कोई प्रमाण नहीं है। क्या इस समाधान का उपयोग करके मेरे आवेदन को अस्वीकार कर दिया जाएगा? यदि हां, तो क्या मैं अस्वीकार किए बिना दूसरे समाधान का उपयोग कर सकता हूं?

जवाबों:


297

IOS5 से शुरू होकर हमारे पास UIWebView के स्क्रॉलव्यू तक सीधी पहुंच है।
आप स्क्रॉलिंग और बाउंस को इस तरह अक्षम कर सकते हैं:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

3
बहुत बहुत धन्यवाद, यह वही है जो मैं देख रहा था। @jsddour, आपको इस उत्तर को स्वीकार करना चाहिए!
marcgg

किसी कारण से, यह मेरे लिए काम नहीं कर रहा है। :-( मैंने एक स्क्रॉलव्यू डाल दिया है और उसमें UIWebView डाल दिया है। फिर ऊपर की 2 पंक्तियों को व्यूविलेयर विधि में सेट करें। लेकिन स्क्रॉल अभी भी वेब दृश्य में काम करता है। क्या कोई मदद कर सकता है। बस जानकारी के लिए, मैं इसे चला रहा हूं। iOS 7 सिम्युलेटर।
अमोघ नाटु

इसका क्या उपयोग है webView.scrollView.bounces = NO;? चूंकि पहली पंक्ति में कोड ने स्क्रॉलिंग को अक्षम कर दिया है।
गॉन

1
इसे प्यार करें जब लोग एक उत्तर दें और योगदानकर्ता को एक वोट देने के लिए समय निकाले बिना दौड़ें। क्या उपयोगकर्ता को वोट देने के लिए जवाब चुनने के लिए सूचित करने का कोई तरीका नहीं है?
जॉन कोगन

1
तेज webView.scrollView.scrollEnabled के लिए = false / webView.scrollView.bounces = false
Chathuranga सिल्वा

26

चूंकि यह प्रश्न अभी भी लागू है, इसलिए इसे करने का एक नया तरीका है! (iOS 7.0+, शायद iOS 6 भी, पुष्टि नहीं की गई)

webView.scrollView.scrollEnabled = NO;

ख्याल रखना :)


मुझे समझ नहीं आ रहा है कि आईबी में क्यों नहीं है: /, cmon APPLE तुम क्या कर रहे हो! फिर भी बहुत अच्छा समाधान!
महमूद अहमद

20

आप बस वेब दृश्य उपयोगकर्ता इंटरैक्शन प्रॉपर्टी को बिना किसी सेट के सेट कर सकते हैं

webView.userInteractionEnabled = NO;

यह बहुत आसान है और ठीक काम करता है, धन्यवाद :)


28
हालाँकि, यह लिंक को टैप करने से रोकता है।
ग्राहम पर्क्स

@GrahamPerks मैंने आपकी टिप्पणी के संबंध में उत्तर को संपादित किया है, कृपया इसकी समीक्षा करें और अनुमोदन करें, धन्यवाद :)
ईश्वर चैतन्य

12

सभी ios संस्करणों के लिए आप इस कोड का उपयोग कर सकते हैं इसके बजाय setScrollEnabled:

for (UIView *view in webview.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
       UIScrollView *scrollView = (UIScrollView *)view;
       scrollView.scrollEnabled = NO;
    }
}

सबसे पहले, मैं "setScrollEnabled" विधि की कोशिश करता हूं और सेब ने मेरे आईपीए को अस्वीकार कर दिया है। तब मैंने इस पद्धति को बदल दिया और स्वीकार किया।
mturhan55



7

मुझे लगता है कि जावास्क्रिप्ट

<script type="text/javascript">
touchMove = function(event) {
event.preventDefault();
}

दूर सबसे अच्छा समाधान है।

वास्तव में :

आपकी पहली परीक्षा, या

[[[WebView subviews] lastObject] setScrollingEnabled:NO];

एक (एक ही चीज़) को अस्वीकार किया जा सकता है क्योंकि दस्तावेज नहीं किया गया है, या आपको एक और आईओएस अपडेट में ऐप क्रैश कर सकता है।

और यह

[[myWebView scrollView] setBounces:NO];

पद्धति आईओएस <5 के साथ काम नहीं करेगी।


5
[[[WebView subviews] lastObject] setScrollingEnabled:NO];

यह मेरे लिए हल है


4
इस पर भरोसा करना गलत होगा क्योंकि यह एक उजागर एपीआई नहीं है।
दीपक दंडुपोलु

[[[वेबव्यू साक्षात्कार] lastObject] setScrollingEnabled: NO]; यह मेरे लिए हल है। वैसे भी, यह मेरे सवाल का जवाब नहीं है। मेरा सवाल यह है कि मुझे ऐसा करने की अनुमति है? ऐसा लगता है कि एसडीके के माध्यम से स्क्रॉल को अक्षम करना निषिद्ध है। लेकिन मुझे यकीन नहीं। और जावास्क्रिप्ट के माध्यम से स्क्रॉल को अक्षम करने के बारे में क्या।
jsaddour

इस बात का कोई सबूत नहीं है कि मेरा सुझाव सेब के द्वारा अस्वीकृति का कारण बनेगा, क्या, सबवेअर सरणी में अंतिम सबवे को कॉल करके और स्क्रॉल करने में अक्षम है इसके खिलाफ एपीआई को उजागर किया गया है? निश्चित रूप से ?. और हाँ इसके लिए जाओ क्योंकि तुम इसका उपयोग कर सकते हो हालांकि जावास्क्रिप्ट के माध्यम से कोई विचार नहीं। माफ़ करना।
theiOSDude

3
नहीं, आपको ऐसा नहीं करना चाहिए। जैसा कि दीपक कहते हैं, आप Apple के UI तत्वों में से किसी एक में इंटरव्यू के अनिर्दिष्ट आंतरिक आदेश पर भरोसा नहीं कर सकते। यदि वे भविष्य के OS अपडेट में आंतरिक संरचना को बदलते हैं, तो आपका एप्लिकेशन क्रैश हो जाएगा। वे विशेष रूप से कई स्थानों पर ऐसा करने के बारे में चेतावनी देते हैं, और आईफोन ओएस 3.0 के उन्नयन में कई एप्लिकेशन सिर्फ इसलिए टूट गए क्योंकि उन्होंने ऐसा किया था।
ब्रैड लार्सन

5

पहला Apple द्वारा खारिज कर दिया गया है। आज सुबह ही मेरे साथ ऐसा हुआ।


5

[[myWebView स्क्रॉलव्यू] सेट करता है: नहीं];


4

मुझे नहीं लगता कि पहला विकल्प Apple द्वारा निषिद्ध है।

तुम कोशिश कर सकते हो

[[[Webview subviews] lastObject] setScrollingEnabled:NO];

यदि आप अपने UIWebView में काम करने के लिए कोई लिंक नहीं चाहते हैं, तो आप भी कर सकते हैं

[myWebView setUserInteractionEnabled:NO];



3

मैंने कुछ UIWebViews को अंदर रखा UIScrollViewऔर यह मेरे लिए स्क्रॉल नहीं कर रहा था, जब तक कि मैं वेब इंटरव्यू (यहां तक ​​कि [[webview scrollview] setScrollEnabled:NO]) के साथ उपयोगकर्ता इंटरैक्शन को अक्षम नहीं करता । इसलिए मैंने UIWebViewएस को अंदर रखा UIViewऔर मेरे लिए काम किया लेकिन फिर मेरे HTML में इंटरएक्टिव लिंक या divs UIWebViewअब काम नहीं कर रहे थे।

केवल एक चीज जो मेरे लिए काम करती है UIWebViewवह है UIScrollViewताकि HTML इंटरैक्शन काम के अंदर हो लेकिन UIScrollingऐसा न हो।

फिर मैंने वेबव्यू के लिए एक कस्टम डेलीगेट बनाया window.open("http:/customEvent")जिसे सुनने के लिए वेबव्यू में निहित HTML से बुलाया जाता है। मैंने एक जावास्क्रिप्ट स्वाइप डिटेक्शन भी जोड़ा है जो मेरे कस्टम इवेंट को आग देगा।

जब वेबवार्ता प्रतिनिधि इसे प्राप्त करता है, तो मैं एक नियंत्रक को एक अधिसूचना देता हूं जो तब गतिशील रूप से मेरी स्क्रॉल करता है UIScrollView। जाहिर है मुझे अगले या पिछले पृष्ठ की निगरानी और स्क्रॉल करने के लिए एक तर्क का निर्माण करना था। सबसे सुंदर समाधान नहीं है, लेकिन यह मेरे लिए काम कर रहा है।


3

अपने HTML में यह आज़माएं ( <HEAD>टैग)

<script> 
  document.ontouchmove = function(event) { event.preventDefault(); }
</script>

यह आपके वेब पेज पर स्क्रॉलिंग को अक्षम कर देगा।

(किसी भी वेबपेज पर काम करता है, न कि केवल UIWebView)


2

मुझे स्क्रॉलिंग को अक्षम करने की आवश्यकता थी क्योंकि एक कस्टम कीबोर्ड को खारिज करना वास्तव में वेब व्यू के साथ स्क्रॉलिंग को गड़बड़ कर देता है। कुछ और काम नहीं किया और मैंने कुछ इस तरह का सहारा लिया:

-(void)viewDidLoad{
  [super viewDidLoad];
  [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
  self.webView.scrollView.showsVerticalScrollIndicator = NO;
}  

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
        self.contentOffset = CGPointZero;
    }
}

1

एक UIWebview और UIScrollview पर एक UITableView है, और वेबव्यू (और स्क्रॉलव्यू के कुल ContentSize में जोड़कर) की ऊंचाई सेट करना चाहते हैं जैसे आप क्या चाहते हैं?


लगभग। लेकिन यह टेबल व्यू हेडर में WebView प्रदर्शित करने के लिए कम जटिल लगता है। लेकिन मेरा सवाल यह है: मैं वेबकेम को एसडीके के माध्यम से स्क्रॉल करने की अनुमति देता हूं? अगर मुझे तहजीब जावास्क्रिप्ट करने की अनुमति नहीं है तो?
jsaddour

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.