2017-01-17 3 views
0

Ich habe bereits nachgeschlagen: -reduzieren interitem Abstand in UICollectionView

UICollectionView distance between cells?

Cell spacing in UICollectionView

Decrease Space between UICollectionViewCells

aber keiner von ihnen für mich gearbeitet.

Ich habe auch versucht die UICollectionViewDelegateFlowLayout Umsetzung und umgesetzt

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
    return 3 
} 

aber es hat keinen Einfluss darauf.

haben Sie einen Blick auf die folgenden Screenshots genommen in iPhone 7/iPhone 5s/iPhone 7 Plus (Bild Auftrag gleiche)

iPhone 7

iPhone 5S

iPhone 7 Plus

ich auch sah selbst-größenverändernde Zellen aus, aber ich möchte keine selbst-größensortierenden Zellen, da meine Artikelgröße immer fest ist und meine Anforderungen erfüllt.

Ich habe auch Mindestabstand von Zellen in das Storyboard gesetzt, aber es hat keine Auswirkungen auf das Layout.

Wie man die große Lücke zwischen den zwei Zellen (Interitemabstand) reduziert, vermeidet Clipping im iPhone 5S und auch die leeren Räume auf der rechten Seite im iPhone 7 Plus (Sie können nicht sehen, da der Hintergrund ist weiß)

Alle Einsichten werden geschätzt.

+0

http://stackoverflow.com/a/40261279/4601170 –

Antwort

3

Wenn Ihre Zellengröße "Fixed" ist, können Sie die Lücke nicht umgehen, da Sie eine feste Breite fest programmiert haben!

Sie müssen die Gesamtbreite des collectionView.frame berechnen und durch 2 teilen, und auch den Abstand zwischen den Elementen und nicht eine "feste" Größe. Schnell typisierten Beispiel:

(berechnen cellsize)

CGFloat spacing = 3.0f 
CGFloat itemWidth = collectionView.frame.size.width/2 - spacing 
CGSize totalSize = itemWidth, itemWidth 
+0

Ich werde das versuchen und auf Sie zurückkommen. Danke, die Antwort scheint sehr logisch zu sein. –

+0

@DarkInnocence Np, ich schlage vor, Sie verwenden Auto-Layout für die Zelle Ansichten, wie Sie Screenshots, wenn Sie eine kleinere/größere Bildschirm haben, werden Sie das Design immer perfekt. –

+0

Funktioniert wie ein Charme: D !! Ich danke dir sehr. Btw, Auto-Layout wurde bereits implementiert. –

0

Try width und height jeder Zelle in sizeForItemAtIndexPath Verfahren einzustellen.

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat screenWidth = screenRect.size.width; 
    float cellWidth = screenWidth/2.0; //Replace the divisor with the column count requirement. Make sure to have it in float. 

    CGFloat screenHeight = screenRect.size.height; 
    screenHeight = screenHeight - 114.0; // Sum of Bottom View & Top View Height 

    float cellHeight = screenHeight /(totalArray.count/2); //totalArray contains item used to show in collectionview 

    if(DEFAULT_CELL_HEIGHT > cellHeight){ 
     cellHeight=DEFAULT_CELL_HEIGHT; 
    } 

    CGSize size = CGSizeMake(cellWidth, cellHeight); 

    return size; 
} 
0

@ Hauzin's Antwort ist in Ordnung, um den Abstand in verschiedenen Geräten loszuwerden. Haben Sie für den Abstand zwischen den Zellen (minimumInteritemSpacingForSectionAt) Ihren View Controller mit diesem Protokoll konform gemacht (UICollectionViewDelegateFlowLayout)?

+0

Ja, das habe ich schon in meiner Frage erwähnt. –

+0

Ja, Sie haben die Methode dort implementiert. Aber ich frage, ob Sie sich wirklich an dieses Protokoll in Code angepasst haben. 'MyViewController: UIViewController, UICollectionViewDelegateFlowLayout' –

+0

Ja, das habe ich getan. Vor Hauzin's Lösung berechnete ich die falsche Breite (hartcodierte Breite) –

Verwandte Themen