¿Cómo puedo cambiar la dirección de desplazamiento en UICollectionView?

Tengo un UICollectionView en mi guión basado iOS de la aplicación.
Cuando el dispositivo está en la orientación vertical me gustaría que desplazarse verticalmente, y cuando está en Paisajista me gustaría que la barra de desplazamiento horizontal.

En UICollectionView puedo ver el scrollEnabled miembro, pero yo no veo ninguna manera de establecer la dirección de desplazamiento. He perdido de algo?

InformationsquelleAutor Kenny | 2013-08-27

6 Kommentare

  1. 62
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];

    Nota demasiado que parece estar bien para llamar a este en prepareForLayout en su diseño de flujo de…

    @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);
        }
    • Para declarar este código en viewdidload();
    • adoptioncurve.net/archives/2012/09/…
    • Estoy teniendo problemas con esto, donde prepareLayout es de forma intermitente no se llama lo suficientemente temprano o llama demasiado tarde. Los resultados son una de 3 cosas: 1) la horizontalSizeClass no ha cambiado mucho y la dirección de desplazamiento se establece incorrectamente 2) scrollingDirection se establece correctamente, pero es demasiado tarde y no surte efecto y 3) todo bien alineado y la dirección de desplazamiento en realidad se lleva a efecto deseado. Parece que tal vez Apple tiene la intención de que la dirección de desplazamiento a ser gestionados en el controlador de vista en lugar de la distribución.
  2. 13

    Conjunto de la scrollDirection de la colección de la vista collectionViewLayout.

    Docs son aquí.

    • Esto sólo se aplica si usted está usando un UICollectionViewFlowLayout.
    • Gracias @Mundi, ¿cómo sabes estas cosas? De todos modos, algo de código para mi propia notas: if let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout { flowLayout.scrollDirection = .Horizontal }
  3. 9

    Usted debe intentar este:

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

    En 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. 7

    Swift 4 y 4.2

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

    Felicitaciones a Mundi y Dan Rosenstark por su respuesta, aquí está el swift versión 4.2.

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea