如何更改 UICollectionView 中的滚动方向?

问题描述 投票:0回答:7

我基于故事板的 iOS 应用程序中有一个 UICollectionView。 当设备处于纵向时,我希望它垂直滚动,当它处于 Landscaper 中时,我希望它水平滚动。

在 UICollectionView 中,我可以看到 scrollEnabled 成员,但我看不到如何设置滚动方向。我是不是错过了什么?

ios objective-c scroll uicollectionview orientation
7个回答
69
投票
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);
    }

16
投票

Swift 4 和 4.2

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

13
投票

设置集合视图的

scrollDirection
collectionViewLayout

文档在这里


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
    }

}

6
投票

感谢 Mundi 和 Dan Rosenstark 的回答,这是 swift 4.2 版本。

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

4
投票

在您的故事板中执行此操作。从身份检查器中选择 滚动方向并选择您的方向。


0
投票

设置布局方向

if let flowLayout = yourCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            flowLayout.scrollDirection = .horizontal
            yourCollectionView.collectionViewLayout = flowLayout
}
© www.soinside.com 2019 - 2024. All rights reserved.