5

Ho riscontrato un problema nel tentativo di impostare la spaziatura tra celle all'interno della vista raccolta. Tutto sembra a posto su iPhone 5, ma quando lo eseguo sui 6 e 6, la spaziatura delle celle aumenta drasticamente. Ho impostato la spaziatura minima su 10, ma sembra che non aiuti. La prima immagine è ciò che sto cercando di ottenere su tutti i dispositivi. Immagini di seguito dopo è quello che sto in realtà sempre:Come impostare la spaziatura UICollectionViewCell dinamica

iPhone 5

iPhone 6

iPhone 6 plus

Ecco una foto delle mie impostazioni in IB:

IB Settings

risposta

3

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]

+0

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

+0

Apprezzo il tuo aiuto, lo metterà alla prova in pochi. –

+0

grazie che ha funzionato! –