UICollectionView横向滚动

5

我正在我的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个回答

4

您可以为集合视图打开分页功能,以实现此效果。转到添加了该集合的xib文件或故事板,并在其属性下启用分页。


好的,但是我如何检测可见的索引是什么? - BDGapps
在滚动视图停止减速时调用此方法,如果您启用分页并且将单元格大小设置为屏幕大小,则只会返回一个位置:-(NSArray *)indexPathsForVisibleItems编辑:所以执行[_tabBarCollectionView indexPathsForVisibleItems]; - Kris Gellci
好的,但是我有两个collectionView,那么我该如何检测它所指的是哪一个collectionView? - BDGapps
传递到滚动视图减速方法中的滚动视图将是集合视图,因此您可以检查是否滚动视图==集合视图或滚动视图==集合视图2。 - Kris Gellci
1
正如您之前所说,indexPathsForVisibleItems 应该只返回 1,因为集合视图的宽度为 320,单元格的宽度也是 320,但它却返回了 2。 - BDGapps
虽然有点老,但这篇文章可能会帮助那些正在寻找如何解决这个问题的人。https://dev59.com/amMl5IYBdhLWcg3wJUEC#24396643 - jdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接