2014-10-25 7 views
30

Desidero creare un normale flusso orizzontaleScrollingLayout UICollectionView con EstimateItemSize e preferredLayoutAttributesFittingAttributes nella cella. Ma c'è qualcosa di sbagliato nell'ultima cella. Qualche idea di dove si trova il problema? Project itselfUICollectionView estimateItemSize - l'ultima cella non è allineata

enter image description here

@implementation RowCollectionView 

- (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout 
{ 
    if (self = [super initWithFrame:frame collectionViewLayout:layout]) 
    { 
     [self configureRowCollectionView]; 
    } 

    return self; 
} 

- (void) awakeFromNib 
{ 
    [super awakeFromNib]; 

    [self configureRowCollectionView]; 
} 

- (void) configureRowCollectionView 
{ 
    self.backgroundColor = [UIColor lightGrayColor]; 

    self.dataSource = self; 
    self.delegate = self; 

    // Horizontal Direction 
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout; 
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; 

    // Estimated Item Size 
    flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height); 


    [self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class])]; 
} 

- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath]; 

    cell.contentView.backgroundColor = [UIColor redColor]; 

    return cell; 
} 

@end 

@implementation RowCollectionViewCell 

- (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes 
{ 
    [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; 

    UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy]; 

    attributes.size = CGSizeMake(80, 80); 

    return attributes; 
} 

@end  
+0

Assolutamente sconcertante perché questo è il caso: S – fatuhoku

+0

Qualche notizia a riguardo? – MrTJ

+0

m di fronte allo stesso problema ... ha fatto per risolverlo? –

risposta

1

si sta impostando estimatedItemSize nella init di vista se stessa.

È necessario impostarlo in alcuni controller.

Inoltre,

Se tutte le cellule hanno la stessa altezza, utilizzare la proprietà ItemSize, al posto di questa proprietà, per specificare le dimensioni della cella, invece.

Documentazione: estimatedItemSize

+1

Il mio problema è stato identificato come un bug dal supporto per gli sviluppatori Apple. – artysx

+2

Qualche notizia a riguardo? – jerrygdm

+1

Qualche notizia? Grazie! – chroman

1

esiste un metodo semplice per risolvere questo. È possibile aggiungere un numero di celle prototipo per controllare la cella nella posizione richiesta. Una volta trovato il problema all'ultima cella. Controlla i riquadri della cella nella finestra Impostazioni.

1

Si chiama super metodo ma non si è utilizzato il layout restituito superAttributi.

[super preferredLayoutAttributesFittingAttributes:layoutAttributes]; 

Si può provare a stampare layout originaleAttributes vs super layoutAttributes. A volte, non è necessario chiamare la funzione super.

In secondo luogo, è possibile creare un flusso di immagini personalizzato o impostare un riquadro per consentire il corretto allineamento della cella. L'ho fatto nel mio progetto.

0

Si può considerare un suggerimento. Secondo me l'altezza di UICollectionView è superiore a UICollectionViewCell Altezza, ecco perché è successo. per favore rendili uguali

0

Le dimensioni della cella personalizzata devono essere uguali a quelle della cella di visualizzazione della raccolta, per favore controlla che questo possa risolvere il problema per te.

-1

Ha avuto lo stesso problema e che cosa risolvere il problema nel mio caso è stato quello di assicurarsi che:

  1. Tutto altezza celle sono uguali.

  2. L'altezza della raccolta è più grande dell'altezza della cella + spazio tra le celle.