2016-06-03 19 views
2

Wie erhalten Sie den Rahmen (CGRect Wert) eines ganzen Abschnitts in einer Instanz? Ich weiß, dass UITableView eine rectForSection: Methode hat. Ich suche nach einer ähnlichen Sache für UICollectionView.Erhalten Sie den Rahmen für einen UICollectionView Abschnitt

Ich überprüfte die Dokumente für UICollectionViewFlowLayout aber konnte nichts finden, das wie rectForSection: aussieht.

+0

dies sehen, wenn es Ihnen hilft http://stackoverflow.com/questions/27011572/how-do-i-get-rect-for-uicollectionview –

+0

http: // stackoverflow.com/questions/12504924/how-to-get-the-rect-of-a-uicollectionviewcell dies? –

+0

Duplikat von http://StackOverflow.com/Questions/27011572/how-do-i-Get-Rect-for-Uricollectionview –

Antwort

0

Die Ansichtsabschnittrahmen sind abhängig vom Layout der Sammlungsansicht. Es kann sich um ein Fließbild oder ein benutzerdefiniertes Layout handeln. Sie werden also keine vordefinierte Lösung haben. Aber Sie können es für Ihre Layout berechnen

UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath]; 

UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:indexPath]; 

mit Ich werde Sie vorschlagen UICollectionViewLayout Unterklasse und Sie in ihm Profilrahmen Berechnungscode setzen, so dass Sie Profilrahmen immer wird die Aktualisierung ein.

HINWEIS: Diese Punkte werden Ihnen keine Obermenge von Rect im Falle von Abschnitt Startpunkt und Endpunkt nicht vertikal ausgerichtet. Um ehrlich zu sein gibt es keinen besseren Weg, um Abschnitt Frame zu bekommen.

2

zu Kollektion hinzufügen Kategorie

@implementation UICollectionView (BMRect) 

- (CGRect)bm_rectForSection:(NSInteger)section { 
    NSInteger sectionNum = [self.dataSource collectionView:self numberOfItemsInSection:section]; 
    if (sectionNum <= 0) { 
     return CGRectZero; 
    } else { 
     CGRect firstRect = [self bm_rectForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]; 
     CGRect lastRect = [self bm_rectForRowAtIndexPath:[NSIndexPath indexPathForItem:sectionNum-1 inSection:section]]; 
     return CGRectMake(0, CGRectGetMinY(firstRect), CGRectGetWidth(self.frame), CGRectGetMaxY(lastRect) - CGRectGetMidY(firstRect)); 
    } 
} 

- (CGRect)bm_rectForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return [self layoutAttributesForItemAtIndexPath:indexPath].frame; 
} 

@end 
+0

Ihre Antwort scheint alles Code zu sein. Fügen Sie einige Wörter hinzu, die das Problem und Ihre Lösung beschreiben. – Matt

+0

@idhong - Sieht so aus, als hätten Sie Probleme, Ihrem Post Code hinzuzufügen und es korrekt zu formatieren. Um Code richtig zu formatieren, müssen Sie vier Leerzeichen vor jeder Zeile hinzufügen. Sie können auch Code einfügen, wählen Sie alle, und drücken Sie STRG-K im Editor, um das automatisch für Sie zu tun – Rob

+1

@Rob, sehr danke. – idhong

Verwandte Themen