Подтвердить что ты не робот

Как изменить направление прокрутки в UICollectionView?

У меня есть UICollectionView в моем приложении iOS. Когда устройство находится в портретной ориентации, мне бы хотелось, чтобы он прокручивался вертикально, и когда он в Landscaper, я бы хотел, чтобы он прокручивался по горизонтали.

В UICollectionView я вижу элемент scrollEnabled, но я не вижу способа установить направление прокрутки. Я что-то пропустил?

4b9b3361

Ответ 1

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

Ответ 2

Установите scrollDirection в виде коллекции collectionViewLayout.

Документы здесь.

Ответ 3

Вы должны попробовать следующее:

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

}

Ответ 4

Престижность Мунди и Дэн Розенштарк за их ответ, вот быстрая версия 3.

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

Ответ 5

Сделайте это в своем раскадровке. От инспектора личности и выберите направление и укажите свое направление. введите описание изображения здесь

Ответ 6

Swift 4

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