2009-06-30 15 views
72

मेरे पास UIView आईफोन के स्प्रिंगबोर्ड की तरह है। मैंने इसे UIScrollView और UIButtons का उपयोग करके बनाया है। मैं स्क्रॉलव्यू पर क्षैतिज स्क्रॉलिंग को अक्षम करना चाहता हूं। मैं केवल लंबवत स्क्रॉलिंग चाहता हूँ। मैं इसे कैसे पूर्ण करूं?UIScrollView की क्षैतिज स्क्रॉलिंग को अक्षम कैसे करें?

+5

आप अपने शीर्षक बदलने चाहिए: आप प्रश्न में क्षैतिज और ऊर्ध्वाधर शीर्षक में के लिए पूछना। लोगों को बाद में खोज इंजन पर आपके प्रश्न मिलते हैं, इसलिए यह अभी भी 2 साल बाद मायने रखता है :) – Julien

+0

@RahulVyas उपरोक्त व्यक्ति का एक बिंदु है। शीर्षक बदलने से शुरुआती लोगों के लिए कोई भ्रम कम हो जाएगा जो यहां एक खोज इंजन (जैसे मुझे;) के माध्यम से प्राप्त करते हैं)। – SpacyRicochet

+0

पोस्टर की ओर से शीर्षक संपादित किया है। (हालांकि वर्तमान में संपादन दिखाई देने से पहले सहकर्मी समीक्षा का इंतजार कर रहा है।) –

उत्तर

110

आपको की contentSize संपत्ति सेट करना होगा। उदाहरण के लिए, यदि आपके UIScrollView विस्तृत (स्क्रीन की चौड़ाई) 320 पिक्सल है, तो आप ऐसा कर सकते हैं:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight); 
[myScrollView setContentSize:scrollableSize]; 

UIScrollView उसके बाद ही पुस्तक खड़ी है, क्योंकि यह पहले से ही सब कुछ क्षैतिज प्रदर्शित कर सकते हैं होगा।

+6

हाय। यह समाधान वास्तव में ठीक काम करता है! उसके लिए धन्यवाद। मैंने स्थिर चौड़ाई को 0 पर सेट करने का प्रयास किया। मेरे लिए यह भी काम करता है। मुझे नहीं पता कि बाद में कुछ दुष्प्रभाव हो सकते हैं या नहीं। लेकिन अगर कोई आकार नहीं जानता (यानी आईफोन और आईपैड के लिए सार्वभौमिक कोड) यह बहुत अच्छा काम करता है! – JackPearse

+5

मुझे लगता है कि CGSizeMake (0, myScrollableHeight) करने के लिए बेहतर है, तो क्षैतिज स्क्रॉलिंग अक्षम सभी भले ही दिखाए गए हैं। – LightNight

+0

एनबी पेजिंग का उपयोग करते समय आयामों में से किसी एक को सेट करना वॉयसओवर को पृष्ठ संख्या को "1 का पृष्ठ 1" के रूप में घोषित करने के लिए सही मूल्य – josef

77

UPDATED:

(बाद @EranMarom उसकी टिप्पणी पर कहा) आप क्षैतिज स्क्रॉल या ScrollViewDelegate विधि में खड़ी स्क्रॉल रोक सकता है।

आप स्क्रॉल करने के लिए चाहते हैं, तो क्षैतिज, तो आप contentOffset.x बढ़ाने की आवश्यकता: यह इस प्रकार से,

बंद हो जाता है क्षैतिज स्क्रॉल है। रोकथाम क्षैतिज दिशा में स्क्रॉलव्यू स्क्रॉल रोकता है।

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    sender.contentOffset.x = 0.0 
} 

बंद हो जाता है कार्यक्षेत्र स्क्रॉल:

आप स्क्रॉल करने के लिए चाहते हैं, तो खड़ी है, तो आप contentOffset.y बढ़ाने की जरूरत है। रोकना जो स्क्रॉलव्यू स्क्रॉल को लंबवत दिशा में रोकता है।

- (void)scrollViewDidScroll:(UIScrollView *)sender { 
    sender.contentOffset.y = 0.0 
} 

कोड से ऊपर x और एक scrollview contentOffset की y में परिवर्तन होने से बचाता है और यह scrollViewDidScroll: विधि में स्क्रॉल को रोकने के लिए ले जाता है।

+0

मैं डाउनवॉटिंग पर विचार कर रहा हूं क्योंकि यह उत्तर यह स्पष्ट नहीं करता है कि आपने स्वयं कोड दिया है और यही वह है। इस तरह का जवाब बहुत अच्छा नहीं है।अच्छा जवाब स्वयं को समझाता है, जबकि अनुभवी डेवलपर्स यह समझ सकते हैं कि इस नए डेवलपर को यह समझ में नहीं आ रहा है कि यहां क्या हो रहा है। सुधार करने का मौका देने के रूप में अभी तक नीचे नहीं किया गया है। – Popeye

+8

यह एक हैक की तरह है, लेकिन यह सब काम विफल होने पर काम किया। तो +1, लेकिन केवल अंतिम उपाय के रूप में उपयोग करें। –

+3

मैं इस प्रतिनिधि विधि का भी उपयोग करता हूं, लेकिन मैं शरीर को एक-लाइनर के साथ प्रतिस्थापित करता हूं, उदाहरण: 'scrollView.contentOffset = CGPointMake (0, scrollView.contentOffset.y); 'क्षैतिज स्क्रॉलिंग को अक्षम करने के लिए। मुझे यह और अधिक पठनीय लगता है, यह छोटा है, और शून्य के लिए परीक्षण करने का कोई मतलब नहीं है क्योंकि कोड के साथ वर्चुअल रूप से कोई ओवरहेड नहीं है जो इसे बार-बार चलाता है (यानि प्रति सेकंड अधिकतम कुछ बार)। – Echelon

10

iOS7 के बाद से

self.automaticallyAdjustsScrollViewInsets = NO; 

// का उपयोग करें और 3 पृष्ठों

self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)]; 
    [self.pageView setShowsVerticalScrollIndicator:NO]; 
    [self.pageView setPagingEnabled:YES]; 
    [self.view addSubview:self.pageView]; 
+0

मुझे नहीं लगता कि यह स्क्रॉलव्यू के स्क्रॉलिंग व्यवहार को अक्षम कर देगा। क्या यह?? –

+0

'self.collectionView.pagingEnabled = हाँ;' चिकनी स्क्रॉलिंग (ड्रैगिंग नहीं) के साथ समस्या को हल करने में मेरी मदद की। समस्या विधि में थी 'scrollViewWillEndDragging: '- targetContentOffset scrollView.contentOffset के समान था और पृष्ठ पहचान तर्क ठीक से काम नहीं करता है। – sig

0

एक बार मैं यह केवल 1 सेल के साथ एक UITableView साथ UIScrollView की जगह किया था के साथ पेज स्क्रोलर बनाने के लिए, यह ठीक काम किया।

+0

क्षमा करें, यह सवाल का जवाब नहीं देता है। – David

0

मैंने कुछ समय के लिए इस और अन्य धागे में असफल प्रयासों की कोशिश करने के लिए संघर्ष किया।

हालांकि, किसी अन्य धागे में (सुनिश्चित नहीं है कि) किसी ने सुझाव दिया है कि UIScrollView पर नकारात्मक बाधा का उपयोग करके उसके लिए काम किया।

इसलिए मैंने असंगत परिणामों के साथ बाधाओं के विभिन्न संयोजनों की कोशिश की। अंत में मेरे लिए क्या काम किया गया था स्क्रॉलव्यू में -32 की अग्रणी और पिछली बाधाओं को जोड़ना और 320 (और केंद्रित) की चौड़ाई के साथ एक (अदृश्य) टेक्स्टव्यू जोड़ना था।

8

स्विफ्ट समाधान

दो दुकानों, आपके विचार के लिए और दूसरा अपनी पुस्तक को देखने के लिए बनाएँ:

@IBOutlet weak var myView: UIView! 
@IBOutlet weak var scrollView: UIScrollView! 
फिर अपने viewDidLayoutSubviews आप निम्नलिखित कोड जोड़ सकते हैं में

:

let scrollSize = CGSize(width: myView.frame.size.width, 
         height: myView.frame.size.height) 
scrollView.contentSize = scrollSize 

व्हा हमने जो किया है उसे दृश्य की ऊंचाई और चौड़ाई एकत्रित किया गया है और स्क्रॉल को सामग्री मिलान आकार से मिलान करने के लिए सेट किया गया है। यह आपके स्क्रॉलव्यू को क्षैतिज स्क्रॉल करने से रोक देगा।


अधिक विचार:

CGSizeMake चौड़ाई लेता & ऊंचाई का उपयोग कर CGFloats। आपको दूसरे पैरामीटर के लिए अपनी UIScrollViews मौजूदा ऊंचाई का उपयोग करने की आवश्यकता हो सकती है। जो इस तरह दिखेगा:

let scrollSize = CGSize(width: myView.frame.size.width, 
         height: scrollView.contentSize.height) 
+0

क्या होगा यदि आप ऊंचाई या चौड़ाई (सार्वभौमिक डिवाइस) नहीं जानते हैं? @danbeaulieu – lukaivicev

+0

@lukesIvi "myView.frame.width" गतिशील रूप से "myView" IBOutlet से चौड़ाई खींच रहा है। –

+0

अच्छी तरह से यह मेरे लिए काम नहीं किया – Frank

4

आप Attributes Inspector अचिह्नित User Interaction Enabled तहत दृश्य का चयन कर सकते हैं, तो।

0

मैं tableview contentInset viewDidLoad में सेट (नीचे के रूप में) है कि क्या क्षैतिज स्क्रॉल के कारण

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0); 

जांच करें कि देखते हैं किसी भी tableview विभिन्न कारणों के लिए सेट contentInset और अक्षम यह

0

यह प्रयास करें था:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight); 
[scrollView setContentSize: scrollSize]; 
0

इस एकल लाइन का उपयोग करें।

self.automaticallyAdjustsScrollViewInsets = NO;

संबंधित मुद्दे