我有一个垂直的UICollectionView
单元格,每个单元格都占据了整个单元格,self.view.frame
我可以轻松地向上滑动以翻页到下一个单元格,但是我想通过按一个按钮来做同样的事情。
我试过使用:
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
和:
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
它们可以工作,但是它们会暂时“遮盖”当前单元格以显示nextCell,而滑动显示过渡期间的两个单元格。
理想情况下,我想使用:
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated
但是我不知道如何访问nextCell的indexPath
...我已经尝试过:
NSIndexPath *nextIndexPath = [_collectionView indexPathForItemAtPoint:CGPointMake(25, (_collectionView.frame.size.height-25)*(_currentIndexRowForCellOnScreen+1))];
哪里_currentIndexRowForCellOnScreen
是indexPath.row
对的UICollectionView
的屏幕上的首次亮相:
- (UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
但是当我把它放进去时:
- (NSIndexPath *)indexPathForCell:(UICollectionViewCell *)cell
它在第一个Cell之后返回NULL,并且不设置动画。
任何方向将不胜感激。感谢您的时间。
假设您的collectionView仅包含1个部分,并且假设每个项目都占据了整个框架,那么您可以执行以下操作:
NSArray *visibleItems = [self.collectionView indexPathsForVisibleItems];
NSIndexPath *currentItem = [visibleItems objectAtIndex:0];
NSIndexPath *nextItem = [NSIndexPath indexPathForItem:currentItem.item + 1 inSection:currentItem.section];
[self.collectionView scrollToItemAtIndexPath:nextItem atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
我很the愧,我不知道NSIndexPath属性.item和.section。除非您在UIKit Framework Reference中对其进行搜索,否则它不会出现在NSIndexPath Class Reference中。但是由于某种原因,在过渡期间我仍然得到与“ white-Out”相同的结果。谢谢您的回答,它的确回答了我最初的问题,因此,我会给您信誉。
您不应该变得泛白...我对其进行了测试,然后按预期方式看到滚动到正确的位置。话虽如此,我使用了一个现有的collectionView,其中包含多个可见的单元格。我会看一下您的单元格,确保在滚动时最小化栅格化图层或您可能会看到。
请注意,indexPathsForVisibleItems可能需要排序才能在索引0处具有最大数量
我知道这是一个古老的讨论,但是我也遇到了“空白”。在我的情况下,我在UICollectionView的顶部有一个插图,以显示其背后的内容。将集合视图向上拖动时,它会在其前面滚动。一切完美完美。但是,只有当我以编程方式设置滚动位置时,我才会在插图的确切高度上使整个顶部变白。然后,当我手动拖动收藏集时,它后面的视图再次可见。这个问题使我发疯!:-(还有其他人遇到这个问题并解决了吗?
进一步的测试表明,“泛白”是UICollectionView的背景色。当我将其设置为红色背景色时,它将为红色。另外,在我以编程方式调整滚动位置之前,它的高度取决于滚动位置(但当然会在顶部最大化)。因此,就像设置滚动位置以编程方式调整集合视图的网格一样,而不是应调整背景颜色的区域。整rick ..!