2014-11-25 17 views
8

Come è possibile impostare la visualizzazione della cella di raccolta per estendersi dinamicamente alla larghezza dello schermo iPhone (ad esempio iphone 5s, iphone 6 plus)?Come è possibile impostare la larghezza della cella di raccolta sull'allungamento dinamico sulla larghezza del telefono

ho provato:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView 
        cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    (ResultCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellClass 
                     forIndexPath:indexPath]; 

    cell.bounds = CGRectMake(0,0, self.view.bounds.size.width, 150); 

    return cell; 
} 

che non funziona. Non vedo il contenuto estendersi sul lato destro dello schermo.

Ho provato ad aggiungere questo metodo delegato:

- (CGSize)collectionView:(UICollectionView *)collectionView 
      layout:(UICollectionViewLayout *)collectionViewLayout 
      sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize cellSize; 

    cellSize.width = self.view.bounds.size.width; 

    // body view height 
    cellSize.height = 150; 

    return cellSize; 
} 

ho impostare punti di interruzione nel metodo, ma questo metodo non vengono mai chiamato?

risposta

13

Ho avuto lo stesso problema con lo stesso caso d'uso. Finalmente ho finito per fare

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(collectionView.bounds.size.width, 150); 
} 

Questo cambia la dimensione di ogni elemento (cella) della vista di raccolta. Quindi puoi cambiare la dimensione di ogni cella usando questo. Qui ho bisogno che la larghezza della cella sia uguale a quella del mio UICollectionView, così ho passato la larghezza e l'altezza specifica di UICollectionview che desideravo. Spero che questo sarebbe di aiuto.

Inoltre non c'è bisogno di impostare i limiti di cella in - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath come la dimensione viene impostata tramite - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

assicurarsi di aver fissato il desiderato Delegates & DataSources al UICollectionView

+0

Grazie. Nel file xib per la cella, ho una larghezza hardcode di 280. Quindi, anche se imposto dinamicamente la larghezza della cella in collectionView layout(), viene sovrascritta nel file xib. Come posso non impostare la larghezza nel file xib per la cella? – michael

+0

Avete allegato i DELEGATI desiderati per UICollectionView. Perché non importa anche se si imposta la larghezza in XIB. Se hai implementato il Delegato (Flowlayout), allora dovrebbe avere la precedenza e accettare i nuovi valori indipendentemente dal valore (280) che è stato impostato tramite XIB. –

+1

Assicurarsi di aver allegato 'UICollectionViewDelegateFlowLayout' per UICollectionView. –

1

La dimensione delle celle è specificata dall'oggetto di layout della vista di raccolta. Stai usando un UICollectionViewFlowLayout? Prova a impostare la proprietà itemSize dell'oggetto layout o ad implementare il metodo delegate: collectionView:layout:sizeForItemAtIndexPath:

Sarai in grado di specificare la dimensione della voce (cella) relativa ai limiti della vista dell'insieme.

Ricordare che è necessario impostare la vista raccolta in modo che venga ridimensionata con il controller di visualizzazione. Se stai usando un UICollectionViewController che dovrebbe essere impostato automaticamente. Altrimenti, dovrai limitare la vista della collezione ai limiti della sua superview.

Aggiornamento:

È possibile impostare la proprietà itemSize del layout direttamente sul layout:

self.layout.itemSize = CGSizeMake(CGRectGetWidth(self.collectionView.bounds), 100); 

o, (meglio se stai gestire la rotazione o il ridimensionamento), implementare l'appropriato delegato di Call back:

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

mi raccomando di leggere le appropriate UICollectionView docs per g et più familiarità con il modo in vista di raccolta e il lavoro di loro disposizione:

+0

Sì, sto usando un UICollectionViewFlowLayout anche ma non sto usando un UICollectionViewController. – michael

+0

@michael Aggiunto un aggiornamento per te. –

+0

Grazie. John. Ho fatto quello che hai suggerito, che sta impostando la dimensione in sizeForItemAtIndexPath. Controllo che la larghezza che restituisco sia 414 (larghezza di iphone più). Ma quando lo eseguo, ci sono ancora spazi vuoti sulla destra. – michael

Problemi correlati