具有单元格间距的 UICollectionView 存在滚动问题

Posted

技术标签:

【中文标题】具有单元格间距的 UICollectionView 存在滚动问题【英文标题】:UICollectionView with spacing between cells has scrolling issues 【发布时间】:2014-09-09 11:49:26 【问题描述】:

我有一个集合视图,其中单元格的大小与整个屏幕一样大。 我正在尝试在单元格之间添加间距,所以当我在单元格之间滚动时,单元格之间会有一些空间 - 就像在 ios 照片库中,当您在全屏图像之间滚动时一样。

显然我启用了分页。 但是由于某种原因,当我在单元格之间滚动时,间距会停留在屏幕上。 即如果单元格宽度为 320,并且下一个单元格之间的间距为 20px,所以当我滚动到下一个单元格时,空间达到 x=0,新单元格从 x=20 开始。

这是为什么呢? 如何获得确切的 iOS 照片库滚动全屏图像效果?

【问题讨论】:

请发布相关代码(或者如果您使用故事板/XIB的屏幕截图)。 【参考方案1】:

将集合的宽度增加到空间值并将集合向左移动到一半空间值。然后将左右部分插图更改为半空间值

或者您可以制作自己的分页,即使单元格大小小于集合视图:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
    CGPoint contentOffset = scrollView.contentOffset;
    CGSize size = scrollView.frame.size;
    CGPoint locationInView = CGPointMake(contentOffset.x + size.width/2, contentOffset.y + size.height/2);
    if (scrollView == _collectionView) 
        NSIndexPath *indexPath = [_collectionView indexPathForItemAtPoint:locationInView];
        [_collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionCenteredHorizontally];
        [self collectionView:_collectionView didSelectItemAtIndexPath:indexPath];
    


- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
    if (!decelerate) 
        [self scrollViewDidEndDecelerating:scrollView];
    


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
    [collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];

【讨论】:

以上是关于具有单元格间距的 UICollectionView 存在滚动问题的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UICollectionView 中的单元格设置可变单元格间距

单元格 UICollectionView 之间的间距不正确

UICollectionView-如何删除第一个单元格上方的间距?

纵向和横向的 UICollectionView 单元格间距

UICollectionView,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距

UICollectionView 单元格间距不再起作用