具有单元格间距的 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,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距