oat(index)
}
同样需要在最后增加一个 cell,防止滚动到最后一页出问题。假设屏幕宽度最多能容纳 n 个 cell (n + 1 个就超出屏幕),那么 cell 的宽度为屏幕宽度减 n 个 cell 的宽度。以下是 cell 的大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
switch indexPath.item {
case numberOfItems:
let n = Int(UIScreen.main.bounds.width / cellWidth)
let d = UIScreen.main.bounds.width - cellWidth * CGFloat(n)
return CGSize(width: d, height: cellHeight)
default:
return CGSize(width: cellWidth, height: cellHeight)
}
}
现在滚动效果的问题是,从松开手到停止滚动的时间太长。加上一句代码就能解决
collectionView.decelerationRate = UIScrollViewDecelerationRateFast
decelerationRate
是UIScrollView
的属性,设置为UIScrollViewDecelerationRateFast
,表示滚动松开手后减速更快(加速度与速度方向相反,加速度的绝对值增大),因而滚动会很快减速并停止。
如果一定要UICollectionView
显示分页内容,并且完全有isPagingEnabled
为true
的分页效果,可以结合UIScrollView
来实现。以下是大概思路。
把UICollectionView
放在底部,正常显示内容。把上文自定义的PageScrollView
放在顶部,响应触摸范围为UICollectionView
的范围,设置UIScrollView
的contentSize
。触摸发生在 scroll view 上。在UIScrollViewDelegate
的scrollViewDidScroll(_ scrollView: UIScrollView)
方法中,让 collection view 跟着 scroll view 滚动。如果要 collection view 响应选中 cell 等操作,需要写其他的代码。
这个方法比较麻烦,要把对 scroll view 的手势传给 collection view,每次刷新数据都要重新设置 scroll view 的contentSize
。具体见 GitHub:https://github.com/Silence-GitHub/PageScrollViewDemo
转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6529728.html