UICollectionView 水平滚动

Posted

技术标签:

【中文标题】UICollectionView 水平滚动【英文标题】:UICollectionView Scrolling Horizontally 【发布时间】:2013-04-27 19:52:32 【问题描述】:

我正在我的 ios 应用中实现 UICollectionView。我有它,所以每个单元格都是屏幕的宽度,我想要它,所以当水平滚动时它锁定到可见单元格并将其移动到屏幕的中心。我下面的代码仅适用于第一个单元格。我不明白如何让它适用于用户可见的任何单元格。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    int index  = 0;
    for (TextCell * t in [_tabBarCollectionView visibleCells]) 
        if ((t.center.x>0)&&(t.center.x<[[UIScreen mainScreen]bounds].size.width)) 
            [_tabBarCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
            break;
        
        index++;
    


【问题讨论】:

【参考方案1】:

您可以为集合视图打开分页,它会产生这种效果。转到添加了集合的 xib 文件或情节提要并在其属性下启用分页。

【讨论】:

好的,但是如何检测可见的索引? 在scrollview中调用这个方法确实结束了减速,如果你有分页并且你说单元格是屏幕的大小,那么只会返回一个位置: - (NSArray *)indexPathsForVisibleItems Edit : [_tabBarCollectionView indexPathsForVisibleItems]; 好的,但我有 2 个集合视图,所以我如何检测它正在谈论的集合视图 传入滚动视图的滚动视图确实结束减速方法将是集合视图,因此您可以检查是滚动视图==集合视图还是滚动视图==集合视图2。 正如你之前所说,indexPathsForVisibleItems 应该只返回 1,因为集合视图宽度为 320,单元格宽度为 320,但它返回 2

以上是关于UICollectionView 水平滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何检测滚动到水平 UICollectionView 的末尾

在 UICollectionView 中禁用水平滚动

UICollectionView 中的垂直和水平滚动方向

UICollectionView 水平滚动

UICollectionView 水平滚动与静态焦点项目

UICollectionView 水平滚动特定列