我正在实现一个滚动方向设置为水平的 uicollection 视图。我还在情节提要中启用了分页选项。在我看来,我一次可以显示 4 个项目。如果我有 5 个项目,第一页有 4 个项目,但第二页有 3 个项目。以前的项目也显示在第二页上。
我只是想问我怎样才能防止这种情况发生?我想要第一页上的 4 个项目,第二页上只有 1 个项目。我正在考虑添加项目并将它们设置为隐藏来执行此操作。这是解决这个问题的正确方法吗?
非常感谢!
我正在实现一个滚动方向设置为水平的 uicollection 视图。我还在情节提要中启用了分页选项。在我看来,我一次可以显示 4 个项目。如果我有 5 个项目,第一页有 4 个项目,但第二页有 3 个项目。以前的项目也显示在第二页上。
我只是想问我怎样才能防止这种情况发生?我想要第一页上的 4 个项目,第二页上只有 1 个项目。我正在考虑添加项目并将它们设置为隐藏来执行此操作。这是解决这个问题的正确方法吗?
非常感谢!
我遇到了类似的问题,我以一种相当老套的方式解决了它,但它确实有效,我现在对此感到满意。
基本上我决定做的是用空的 UICollectionViewCells 填充集合视图页面。
我首先计算总共有多少项目。如果我的 NSFetchedResultsController 提供的项目总数不是三的精确倍数,那么我添加必要的项目数,以便总数是三的倍数。
例如,如果我得到四个类别,我需要再添加两个以使其总共六个:
#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;
}
然后,当需要生成单元格时,我执行以下操作:
- (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;
}
我希望这对将来的某人有所帮助,因为解决这个问题并不像它应该的那样简单,而且我很惊讶流布局并没有自动适当地计算页面。
也许您可以将contentSize
UICollectionView 的属性设置为其下一个倍数bounds
?
例如对于单节集合视图:
NSUInteger itemsPerPage = 4;
NSUInteger pageCount = (NSUInteger) ceilf((float)[collectionView.dataSource numberOfItemsInSection:0] / itemsPerPage);
CGFloat contentWidth = collectionView.bounds.size.width * pageCount;
collectionView.contentSize = CGSizeMake(contentWidth, collectionView.contentSize.height);