2013-08-27 4 views
31

私のストーリーボードには、UICollectionViewがあります。iOS appです。 デバイスが縦向きになっているときは縦にスクロールしてください。ランドスケープにあるときは横にスクロールしてください。UICollectionViewでスクロール方向を変更するにはどうすればよいですか?

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

答えて

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

注...

@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

私はprepareLayoutが断続的に早く呼び出されていないか、あまりにも遅く呼び出されたという問題を見ています。結果は3つのうちの1つです:1)horizo​​ntalSizeClassがまだ変更されておらず、スクロール方向が正しく設定されていない2)スクロール方向が正しく設定されているが、遅すぎて効果がなく、3)すべてが正しく整列し、実際には必要に応じて有効になります。アップルがレイアウトの代わりにビューコントローラでスクロールの方向を管理しようとしているようだ。 – BTRUE

9

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

文書はhereです。あなたのフローレイアウトでprepareForLayoutでこれを呼び出すには罰金であると考えられることにも

+2

あなたは 'UICollectionViewFlowLayout'を使用している場合にのみ適用されます。 –

+2

ありがとう@ムンディ、どうやってこのことを知っていますか?とにかく、自分のメモのためにこれをコード化しています: 'let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout {flowLayout.scrollDirection = .Horizo​​ntal} ' –

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

答えはMundiとDan Rosenstarkの名誉です。ここには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 
    } 
関連する問題