2016-06-25 37 views
16

Sto cercando di implementare un CollectionView. Quando utilizzo l'Autolayout, le mie celle non cambieranno le dimensioni, ma il loro allineamento.Come impostare UICollectionViewCell Width e Height a livello di programmazione

Ora vorrei piuttosto cambiare le loro dimensioni ad es.

//var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10) 

Ho provato a installare nel mio CellForItemAtIndexPath

collectionCell.size = size 

non ha funzionato però.

C'è un modo per raggiungere questo obiettivo?

modificare:

Sembra, che le risposte cambierà solo la mia larghezza CollectionView e si altezza. Sono possibili conflitti nei vincoli? Qualche idea su questo?

risposta

31

uso questo metodo per impostare l'altezza di cella personalizzato larghezza

Objective-C

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame))); 
} 

Swift

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: screenWidth, height: screenWidth); 
} 
+0

sto cercando il codice Swift. Non sono sicuro di come trasformare questo. – JVS

+0

controlla questo ora – PinkeshGjr

+0

in qualche modo non cambia le mie celle, ma più come il mio CollectionView – JVS

6

Ecco cosa si può fare per avere DIF la larghezza e l'altezza ferenti per la cella di quanto riguarda le dimensioni iPhone:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    var width = (self.view.frame.size.width - 12 * 3)/3 //some width 
    var height = width * 1.5 //ratio 
    return CGSize(width: width, height: height); 
} 

E forse si dovrebbe anche disabilitare i vincoli layout automatico sul cellulare per questa risposta al lavoro.

1

prova sotto metodo

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
3

La vista raccolta ha una la layout oggetto. Nel tuo caso, è probabilmente un layout di flusso (UICollectionViewFlowLayout). Impostare la proprietà itemSize del layout di flusso.

+0

Provato questo. mi dà lo stesso problema come prima. in qualche modo il mio CollectionView cambia le sue dimensioni piuttosto che le mie celle. – JVS

+2

Beh, tutto dipende da quando lo si fa. Non hai mostrato il tuo vero codice, quindi chissà cosa stai facendo? Ti assicuro che funziona. – matt

15

Finalmente risposta. Dovresti estendere UICollectionViewDelegateFlowLayout
Questo dovrebbe funzionare con le risposte sopra.

+0

Potresti scrivere un esempio? –

1

Prova sotto metodo

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
31

Assicurarsi di aggiungere il protocollo UICollectionViewDelegateFlowLayout nella dichiarazione class

class MyCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout 
{ 
    //MARK: - UICollectionViewDelegateFlowLayout 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    { 
     return CGSize(width: 100.0, height: 100.0) 
    } 
} 
+0

Non dimenticare di usare il layout del flusso e non personalizzato. Allora il tuo è l'unico che ha funzionato per me. Grazie! – Sean

-2

Questa è la mia versione, trovare il rapporto adatto per ottenere le dimensioni della cella secondo il vostro requisito .

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
return CGSizeMake(CGRectGetWidth(collectionView.frame)/4, CGRectGetHeight(collectionView.frame)/4); 
} 
0

Un altro modo è quello di impostare il valore direttamente nel layout flusso

let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
    layout.itemSize = CGSize(width: size, height: size)