UICollectionView水平分页,页面之间有空格

Eya*_*yal 14 uikit ios uipageviewcontroller uicollectionview uicollectionviewlayout

我正在寻找一种UIPageViewController用a 替换原生水平分页的方法UICollectionView.

到目前为止,我做了以下事情:

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
layout.itemSize = collectionView.frame.size
layout.minimumLineSpacing = 0
layout.minimumInteritemSpacing = 10

collectionView.setCollectionViewLayout(layout, animated: false)
collectionView.isPagingEnabled = true
collectionView.alwaysBounceVertical = false
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到水平分页效果.

现在我想要添加的页面之间的水平空间(像你将做UIPageViewControllerOptionInterPageSpacingKeyUIPageViewController)

到目前为止,我无法在不损坏分页效果的情况下添加空格.我正在寻找与以下相同的行为UIPageViewController:单元格应该填满整个屏幕宽度,并且单元格之间的空间应该只在切换页面时可见.

Jon*_*ose 20

解决方案一:

  1. collectionView.isPagingEnabled = false
  2. minimumLineSpacing为页面之间的距离添加一个
  3. 实现targetContentOffsetForProposedContentOffset:withScrollingVelocity:将contentOffset移动到最近的页面.您可以根据您的简单的数学计算的页面itemSizeminimumLineSpacing,但它可以采取一些工作来得到它的权利.

解决方案二:

  1. collectionView.isPagingEnabled = true
  2. minimumLineSpacing为页面之间的距离添加一个
  3. 分页大小基于collectionView的边界.所以将collectionView放大,然后使用screenSize.例如,如果你有一个minimumLineSpacing10,那么将collectionView的框架设置为{0,-5,width + 10,height}
  4. 将contentInset设置为等于minimumLineSpacing使第一个和最后一个项正确显示.

  • 感谢您的提示,通过匹配inset来完成此操作,就像您说CollectionViewLayout中的`minimumLineSpacing = 20`和`sectionInset = UIEdgeInsets(top:0,left:10,bottom:0,right:10)` (3认同)
  • 但是很难复制所有分页行为 (2认同)