web-dev-qa-db-ja.com

UICollectionViewでスクロール方向を変更するにはどうすればよいですか?

ストーリーボードベースのiOSアプリにICollectionViewがあります。デバイスが縦向きの場合は縦にスクロールし、Landscaperの場合は横にスクロールします。

UICollectionViewにはscrollEnabledメンバーが表示されますが、スクロール方向を設定する方法は表示されません。私は何かを見逃しましたか?

36
Kenny
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);
    }
61
user3040186

コレクションビューのscrollDirectioncollectionViewLayoutを設定します。

ドキュメントは here です。

13
Mundi

これを試してください:

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

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
    }

}
9
Allan Scofield

Swift 4および4.2

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

MundiとDan Rosenstarkに感謝します。答えはSwift 4.2バージョンです。

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.scrollDirection = .horizontal
}
3
Travis M.

ストーリーボードでそれを行います。 IDインスペクターから方向を選択し、方向を示します。 enter image description here