traf ich ein ähnliches Problem, und ich löste es in eine eher hackish-Gefühl Art und Weise, aber es funktioniert, und ich bin zufrieden mit ihm für den Moment.
Im Grunde habe ich beschlossen, die Seiten der Sammlungsansicht mit leeren UICollectionViewCells zu füllen.
Ich zuerst berechnen, wie viele Artikel insgesamt werden. Wenn die Gesamtzahl der von meinem NSFetchedResultsController bereitgestellten Elemente kein genaues Vielfaches von drei ist, füge ich die erforderliche Anzahl von Elementen hinzu, sodass die Gesamtzahl ein Vielfaches von drei ist.
Zum Beispiel, wenn ich vier Kategorien zurück zu bekommen, werde ich brauche zwei weitere hinzuzufügen es insgesamt sechs zu machen:
#define ITEMS_PER_PAGE 3
//...
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
NSArray *sections = [categoriesFetchedResultsController sections];
id <NSFetchedResultsSectionInfo> sectionInfo = sections[section];
NSInteger categoryCount = [sectionInfo numberOfObjects];
NSInteger extraItemsNeeded = ITEMS_PER_PAGE - (categoryCount % ITEMS_PER_PAGE);
NSInteger totalItems = categoryCount + extraItemsNeeded;
NSInteger pages = (NSInteger)(totalItems/ITEMS_PER_PAGE);
self.pageControl.numberOfPages = pages;
return totalItems;
}
Dann, wenn es Zeit, um die Zellen zu generieren kommt, kann ich das folgende:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CategoryCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CategoryCell" forIndexPath:indexPath];
// use a generic UICollectionCell for the "empty cell" case.
UICollectionViewCell *emptyCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"EmptyCell" forIndexPath:indexPath];
if (indexPath.row < [[categoriesFetchedResultsController fetchedObjects] count]) {
NSManagedObject *object = [categoriesFetchedResultsController objectAtIndexPath:indexPath];
NSData *imageData = [object valueForKey:@"thumbnail_data"];
NSString *name = [object valueForKey:@"category_name"];
cell.image.image = [UIImage imageWithData:imageData];
cell.label.text = name;
return cell;
}
return emptyCell;
}
ich hoffe, das jemand in der Zukunft hilft, da die Lösung dieses Problems nicht so einfach war, wie es hätte sein sollen, und ich war überrascht, dass der Fluss Layout entsprechend nicht berechnen nur die Seiten automatisch.
Konnten Sie dieses Problem lösen? Ich habe das gleiche Problem. Ich habe insgesamt 4 Artikel und jede Seite sollte drei Artikel enthalten. Die erste Seite wird korrekt erstellt, aber die Breite der zweiten Seite ist offensichtlich nur so breit wie die des vierten Elements, so scheint es nie auf die zweite Seite zu blättern ... die zweite "Seite" enthält die 2., 3. und 4. Elemente und es schnappt zurück. Stattdessen hätte ich erwartet, dass es auf der zweiten Seite nur einen Eintrag gibt. Jede Hilfe wird geschätzt! –