我正在寻找一种用UIPageViewController
替换原生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
这很好用,我得到一个水平的分页效果。
现在我想在页面之间添加水平空格(就像你将UIPageViewControllerOptionInterPageSpacingKey
上的UIPageViewController
一样)
到目前为止,我无法在不损坏分页效果的情况下添加空格。
我正在寻找与UIPageViewController
相同的行为:单元格应该填满整个屏幕宽度,单元格之间的空间应该只在切换页面时可见。
答案 0 :(得分:18)
解决方案一:
collectionView.isPagingEnabled = false
minimumLineSpacing
targetContentOffsetForProposedContentOffset:withScrollingVelocity:
将contentOffset移动到最近的页面。您可以根据itemSize
和minimumLineSpacing
计算简单数学页面,但要做到这一点可能需要做一些工作。解决方案二:
collectionView.isPagingEnabled = true
minimumLineSpacing
minimumLineSpacing
为10,则将collectionView的框架设置为{0,-5,width + 10,height} minimumLineSpacing
,以使第一个和最后一个项目正确显示。答案 1 :(得分:2)
继续使用Swift 3.1编写的代码,我确信它很容易为您理解:
let pageSpacing: CGFloat = 10
class ViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: view.frame.width + pageSpacing, height: view.frame.height)
layout.scrollDirection = .horizontal
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
let frame = CGRect(x: 0, y: 0, width: view.frame.width + pageSpacing, height: view.frame.height)
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
view.addSubview(collectionView)
}
}
class MyCell: UICollectionViewCell {
var fullScreenImageView = UIImageView()
override func layoutSubviews() {
super.layoutSubviews()
fullScreenImageView.frame = CGRect(x: 0, y: 0, width: frame.width - pageSpacing, height: frame.height)
}
}
希望能帮到你。