2013-08-27 7 views
31

मेरे पास UICollectionView है जो मेरी स्टोरीबोर्ड आईओएस ऐप में है। जब डिवाइस पोर्ट्रेट अभिविन्यास में है, तो मैं इसे लंबवत स्क्रॉल करना चाहता हूं, और जब यह लैंडस्केपर में है तो मैं क्षैतिज स्क्रॉल करना चाहता हूं।मैं UICollectionView में स्क्रॉल दिशा कैसे बदल सकता हूं?

UICollectionView में मैं scrollEnabled सदस्य देख सकता हूं, लेकिन मुझे स्क्रॉल दिशा सेट करने का कोई तरीका नहीं दिख सकता है। क्या मुझे कुछ याद आया है?

उत्तर

51
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical]; 

नोट भी है कि यह अपने प्रवाह लेआउट में prepareForLayout में यह कॉल करने के लिए ठीक हो रहा है ...

@interface LayoutHorizontalThings : UICollectionViewFlowLayout 
@end 

@implementation LayoutHorizontalBooks 
-(void)prepareLayout 
    { 
    [super prepareLayout]; 

    self.scrollDirection = UICollectionViewScrollDirectionHorizontal; 

    self.minimumInteritemSpacing = 0; 
    self.minimumLineSpacing = 0; 
    self.itemSize = CGSizeMake(110,130); 
    self.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); 
    } 
+0

इस कोड को viewdidload() में घोषित करने के लिए; – user3040186

+1

http://adoptioncurve.net/archives/2012/09/a-simple-uicollectionview-tutorial/ – user3040186

+0

मुझे इसके साथ समस्याएं दिखाई दे रही हैं, जहां तैयार करने के लिए अंतराल को पर्याप्त रूप से पर्याप्त नहीं कहा जाता है या बहुत देर हो चुकी है। परिणाम 3 चीजों में से एक हैं: 1) क्षैतिज साइज क्लास अभी तक नहीं बदला है और स्क्रॉलिंग दिशा गलत तरीके से सेट की गई है 2) स्क्रॉलिंग डायरेक्शन सही ढंग से सेट किया गया है लेकिन यह बहुत देर हो चुकी है और यह प्रभावी नहीं होती है और 3) सब ठीक से लाइनें और स्क्रॉलिंग दिशा वास्तव में वांछित के रूप में प्रभाव लेता है। ऐसा लगता है कि ऐप्पल लेआउट के बजाय दृश्य नियंत्रक में प्रबंधित करने के लिए स्क्रॉलिंग दिशा के लिए इरादा रखता है। – BTRUE

9

संग्रह दृश्य के के scrollDirection सेट करें।

डॉक्स here हैं।

+2

यह केवल यदि आप एक 'UICollectionViewFlowLayout' उपयोग कर रहे हैं लागू होता है। –

+2

धन्यवाद @ मुंडी, आप यह सामान कैसे जानते हैं? वैसे भी, कुछ इसे अपने नोट्स के लिए कोड करते हैं: 'अगर प्रवाह प्रवाह = संग्रह दृश्य के रूप में दें? UICollectionViewFlowLayout {flowLayout.scrollDirection = .Horizontal} ' –

9

आप इस प्रयास करना चाहिए:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ 

    UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)[self.collectionView collectionViewLayout]; 

    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)){ 
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal; 
    } 
    else{ 
    layout.scrollDirection = UICollectionViewScrollDirectionVertical; 
    } 
} 

में स्विफ्ट:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { 

    var layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout 

    if ((toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight)){ 

     layout.scrollDirection = UICollectionViewScrollDirection.Vertical 
    } 
    else{ 
     layout.scrollDirection = UICollectionViewScrollDirection.Horizontal 
    } 

} 
1

अपने उत्तर के लिए मुंडी और दान रोसेनस्टर्क के लिए कुडोस, यहां तेजी से 3 संस्करण है।

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout { 
    flowLayout.scrollDirection = .horizontal 
} 
0

अपने स्टोरीबोर्ड में ऐसा करें। पहचान निरीक्षक से और दिशा का चयन करें और अपनी दिशा दें। enter image description here

0

स्विफ्ट 4

if let layout = collectionViewObj.collectionViewLayout as? UICollectionViewFlowLayout { 
     layout.scrollDirection = .vertical // .horizontal 
    } 
संबंधित मुद्दे