2014-07-11 19 views
6

So verwende ich UICollectionView unter AutoLayout-fähigen Storyboard. Ich versuche, die Zellengröße basierend auf collectionView selbst einzustellen und es basiert auf [collectionView: layout: sizeForItemAtIndexPath:] Methode. collectionView hängt auch von Auto-Layout und es gibt falsche Größe beim ersten Mal (ich nehme an, das ist vor der Ansicht ist layouted). Ich weiß, dass sie die richtige Größe haben, nachdem viewDidLayoutSubviews Methode aufgerufen wird, aber es verursacht doppelte Nachladung der collectionView Elemente, die UI Störungen zur Laufzeit macht.UICollectionView Zellengröße in AutoLayout

Hier ist [collectionView: layout: sizeForItemAtIndexPath:] Methode meiner Implementierung.

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize innerSize = CGSizeMake(galleryView.frame.size.width - 80, galleryView.frame.size.height - 40); 
    GLPhotoAsset *photo = [(PCOpticsPhotoPoint *)_cluster.points[indexPath.row] photo]; 
    CGFloat ratio = MIN(innerSize.width/photo.size.width, innerSize.height/photo.size.height); 

    return CGSizeMake(photo.size.width * ratio, photo.size.height * ratio); 
} 
+0

"Ich versuche, die Zellengröße basierend auf collectionView festzulegen" Nicht auf Sie? –

+0

@KyleTruscott Ich berechne und gebe die Zellengröße basierend auf collectionView in der Methode [collectionView: layout: sizeForItemAtIndexPath:] zurück. Das Problem ist, dass diese Methode vor dem automatischen Layout aufgerufen wird. – Pei

+0

Willst du sagen, dass die Größe deiner Zellen mit dem Rect der Sammelansicht insgesamt "verwandt" ist? Vielleicht sollten Sie Ihre Implementierung von '[collectionView: layout: sizeForItemAtIndexPath:]' –

Antwort

1

Stellen Sie sicher, dass die Eigenschaft Clip Subviews der Ansicht aktiviert ist. . . .

Und Ihre collectionView-Eigenschaft cellSize muss in Größe & Position Abschnitt ordnungsgemäß sein. . .

Vielleicht hilft Ihnen das. . .

0

Wie Sie eine falsche Layoutgröße vor sizeForItemAtIndexPath bekommen:, dann gehe zu Storyboard und überprüfen Sie die Zellengröße gegeben für diese 3 genannt - Collection, CollectionViewCell und CollectionViewFlowLayout

Mach sie gleich. (Stellen Sie auch die Größe relativ zur Standardgröße der Sammlungsansicht ein, wie Sie benötigen.)

Verwandte Themen