horizontal ios scroll uicollectionview uicollectionviewlayout

ios - horizontal - UICollectionView desplazándose en ambas direcciones



uicollectionview horizontal scroll (4)

Hice un UICollectionView con un desplazamiento vertical.

El ancho de la celda es mayor que el ancho de la pantalla, así que creé un customFlowLayout basado en el diseño de UICollectionViewFlow devuelve el tamaño de contenido calculado correcto.

Sin embargo, esto no funciona. Cuando el ancho de la celda es menor que el ancho de la pantalla, funciona. ¿Significa que no podemos tener un ancho mayor que el ancho de la pantalla en desplazamiento vertical?

Es lo mismo para el desplazamiento horizontal, pero entonces la altura de CollectionView se limita a la altura de la pantalla.

¿Hay alguna manera de hacer que funcione?


Antes de que puedas hacer eso, DEBES usar un tipo diferente de diseño. El diseño del flujo representa sus elementos como una lista y abarca estos elementos en celdas en función del ancho disponible. Si desea tener desplazamiento tanto horizontal como vertical, debe especificar de alguna manera el número de columnas para su cuadrícula. El FlowLayout no tiene eso. Una solución sencilla es crear una subclase de UICollectionViewLayout e invalidar collectionViewContentSize para hacer que se ajuste a width = a la suma agregada de las celdas de una fila (aquí es donde es necesario saber cuántas columnas desea), más cualquier espacio adicional entre ellas. ellos. Esto funcionará bien si sus celdas tienen el mismo tamaño por columna, similar a una cuadrícula.


Como ya han dicho otros, UICollectionView solo puede desplazarse en una dirección utilizando un diseño de flujo. Sin embargo, puede lograr esto muy fácilmente sin crear un diseño personalizado o utilizar una biblioteca de terceros.

Cuando coloca su vista en el tablero de la historia, puede colocar su UICollectionView incrustado en un UIScrollView . Configure la vista de desplazamiento para desplazarse horizontalmente y UICollectionView para desplazarse verticalmente. Luego, establezca UICollectionView.delaysContentTouches en true para que los toques pasen a través de UIScrollView y no piense que está intentando desplazarse por la vista de colección.

Cuando configura UICollectionView , establezca que el tamaño y el tamaño de las celdas sean lo que realmente desea que sean (más amplio que la pantalla real) y distribúyalos en consecuencia.

Ahora, en el contenedor UIViewController coloque este código en el ciclo de vida de la vista.

- (void)viewDidLayoutSubviews { self.myScrollView.contentSize = self.myCollectionView.frame.size; }

Eso es, literalmente, todo lo que tienes que hacer para lograr lo que estás describiendo. Ahora su vista de desplazamiento debe permitirle desplazarse horizontalmente para ver su celda completa y su collectionView debe desplazarse verticalmente a través de sus celdas.

Feliz programacion



No estoy seguro de haber entendido tu problema.

Pero si ha realizado un diseño personalizado, asegúrese de haber implementado:

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;

y que el tamaño y el tamaño de sus atributos de diseño se configuran con los valores correctos para su ruta de índice de "celda grande".

También asegúrate de que has implementado:

- (CGSize) collectionViewContentSize;

Este método devuelve el contentSize de la vista de colección. Si contentSize.width> youAppFrame.width debería tener desplazamiento horizontal. Lo mismo para la altura y el desplazamiento vertical.

También asegúrese de que su collectionView permita el desplazamiento y que su diseño esté preparado correctamente usando:

- (void)prepareLayout

Por cierto, para su diseño, ¿ha sobrecargado UICollectionViewLayout o UICollectionViewFlowLayout ?