UICollectionView自定义水平分页布局

mpa*_*h91 1 ios uicollectionviewcell uicollectionviewlayout

[![collectionview example] [1]] [1]

我试图使用集合视图模拟此行为.我已经开始使用这种方法,它让我更接近.虽然当我在水平分页CollectionView上进一步向右滑动时,内容会进一步向左移动.电池之间的间距也是关闭的.我认为它需要自定义布局,但我不确定.

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    return CGSize(width: collectionView.frame.width - 20, height: collectionView.frame.height - 20)

}
Run Code Online (Sandbox Code Playgroud)

Moh*_*afa 7

它取决于3个因素1)截面插入2)细胞间距3)细胞大小

你必须根据你的情况改变其他人的任何变化

1)用20左右设置

在此输入图像描述

2)将单元格间距设置为10

func collectionView(collectionView: UICollectionView,
    layout collectionViewLayout: UICollectionViewLayout,
    minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
        return 10
}
func collectionView(collectionView: UICollectionView, layout
    collectionViewLayout: UICollectionViewLayout,
    minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
        return 10
}
Run Code Online (Sandbox Code Playgroud)

3)设置单元格大小

func collectionView(collectionView: UICollectionView,
    layout collectionViewLayout: UICollectionViewLayout,
    sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width / 1.15 ,height: collectionView.frame.height)
}
Run Code Online (Sandbox Code Playgroud)

4)这将在屏幕中居中

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

    let pageWidth:CGFloat = scrollView.frame.width / 1.15 + cellSpacing ;

    let currentOffset:CGFloat = scrollView.contentOffset.x;
    let targetOffset:CGFloat = targetContentOffset.memory.x
    var newTargetOffset:CGFloat = 0;

    if targetOffset > currentOffset
    {
        newTargetOffset = ceil(currentOffset / pageWidth) * pageWidth;
    }
    else
    {
        newTargetOffset = floor(currentOffset / pageWidth) * pageWidth;
    }

    if newTargetOffset < 0
    {
        newTargetOffset = 0
    }
    else if newTargetOffset > scrollView.contentSize.width
    {
    newTargetOffset = scrollView.contentSize.width;
    }

    targetContentOffset.memory.x = currentOffset

    scrollView.setContentOffset(CGPointMake(newTargetOffset, 0), animated: true)

}
Run Code Online (Sandbox Code Playgroud)