Sulla base di la tua domanda, sembra che tu intendessi impostare minimumInteritemSpacing
(spaziatura minima da utilizzare tra gli elementi nella stessa riga).
In entrambi i casi, la spaziatura minima è la distanza più piccola che si accetta, non la spaziatura esatta desiderata. Uno spazio di 100 è ancora valido poiché è maggiore di un minimo di 10.
Il vero problema è la dimensione della cella, che hai corretto a 150x200. Se vuoi che le tue celle regolino la loro larghezza, dovrai calcolare il layout del flusso itemSize
in base alla larghezza della vista.
Se tutte le vostre cellule saranno le stesse dimensioni, è possibile impostare itemSize
proprietà del layout di flusso:
#define kCellsPerRow 2
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing * (kCellsPerRow - 1);
CGFloat cellWidth = availableWidthForCells/kCellsPerRow;
flowLayout.itemSize = CGSizeMake(cellWidth, flowLayout.itemSize.height);
Se avete bisogno di calcolare per cella formati, è possibile fallo nel delegato collectionView:layout:sizeForItemAtIndexPath:
.
ricalcola ItemSize quando il dispositivo passa orientamento e aggiornare il layout:
la layout ridisegna senza animazione:
[self.collectionView.collectionViewLayout invalidateLayout]
layout cambia Animate:
[self.collectionView performBatchUpdates:nil completion:nil]
fonte
2014-11-03 07:09:07
Se uso la proprietà itemSze quello sarebbe lo stesso come me impostare una larghezza fissa sul cellulare? Ho implementato la proprietà itemSize nella mia vista caricata ma ho ottenuto gli stessi risultati. Non sono sicuro se sto seguendo correttamente. –
Apprezzo il tuo aiuto, lo metterà alla prova in pochi. –
grazie che ha funzionato! –