2013-08-27 18 views
31

Ich habe eine UICollectionView in meinem Storyboard basiert iOS App. Wenn das Gerät im Hochformat ausgerichtet ist, möchte ich, dass es vertikal scrollt, und wenn es in Landscaper ist, möchte ich, dass es horizontal scrollt.Wie kann ich die Bildlaufrichtung in UICollectionView ändern?

In UICollectionView kann ich die scrollEnabled Mitglied sehen, aber ich sehe keine Möglichkeit, die Bildlaufrichtung einzustellen. Habe ich etwas verpasst?

Antwort

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

Hinweis zu, dass es sich dabei, um feine scheint ... in Ihrem Flow Layout in prepareForLayout zu nennen

@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

So deklarieren Sie diesen Code in viewdidload(); – user3040186

+1

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

+0

Ich sehe Probleme mit diesem, wo PrepareLayout zeitweise nicht früh genug oder zu spät aufgerufen wird. Die Ergebnisse sind eines von drei Dingen: 1) die horizontalSizeClass hat sich noch nicht geändert und die Scrollrichtung ist falsch eingestellt 2) scrollingDirection ist richtig eingestellt, aber es ist zu spät und wird nicht wirksam und 3) alles wird richtig aufgereiht und die Scrollrichtung wirkt tatsächlich wie gewünscht. Es scheint, dass Apple beabsichtigt, die Scroll-Richtung im View-Controller anstatt im Layout zu verwalten. – BTRUE

9

Setzen Sie die scrollDirection der Sammlungsansicht collectionViewLayout.

Dokumente sind here.

+2

Dies gilt nur, wenn Sie eine 'UICollectionViewFlowLayout' verwenden. –

+2

Danke @Mundi, woher weißt du das Zeug? Wie auch immer, einige Code dies für meine eigenen Notizen: 'wenn lassen Sie flowLayout = collectionViewLayout als? UICollectionViewFlowLayout {flowLayout.scrollDirection = .Horizontal} ' –

9

Sie sollten dies versuchen:

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

In Swift:

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

Kudos an Mundi und Dan Rosenstark für ihre Antwort, hier ist die schnelle 3-Version.

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

Machen Sie das in Ihrem Storyboard. Aus dem Identity Inspector und wählen Sie die Richtung und geben Sie Ihre Richtung. enter image description here

0

Swift 4

if let layout = collectionViewObj.collectionViewLayout as? UICollectionViewFlowLayout { 
     layout.scrollDirection = .vertical // .horizontal 
    } 
Verwandte Themen