CustomPageableCollectionView

一个可分页的集合/表格/滚动视图,可以使用任何页面大小,并且仍然使用标准的 iOS 分页。

什么?

UIScrollViewisPagingEnabled只有在页面与滚动视图自身的大小完全一致时才能很好地工作。然而,通常情况下,您处理的是内边距,或者您只是想要更小的页面。

许多解决方案会重写scrollViewDidEndDraggingWithVelocity并尝试复制 iOS 的分页功能,但大多数解决方案没有考虑到快速滑动。

这个小型的库提供了 3 个子类,允许您根据需要调整分页:您可以设置页面大小、分页边缘、内边距等。

子类包括:

用法

这 3 个子类都默认将isPagingEnabled设置为true,并且每个子类都有pagingConfiguration属性。此属性确定分页的执行方式。

您可以配置以下内容:

示例

这会将集合视图一次分页 100 个点,并将页面对齐到前缘右侧 100 个点的位置。

collectionView.pagingConfiguration.size = .absolute(width: 100)
collectionView.pagingConfiguration.alignment = .leading
collectionView.pagingConfiguration.positionInsets.left = 100

这会将集合视图垂直分页,页面大小为可见区域的 50%,并垂直居中页面。

collectionView.pagingConfiguration.size = .fractional(height: 0.5)
collectionView.pagingConfiguration.alignment = .centerY

这会将集合视图垂直分页,页面大小为可见区域的 50%,减去 20 个点的内边距,并将页面的底部与集合视图的底部对齐。

collectionView.pagingConfiguration.size = .fractional(height: 0.5)
collectionView.pagingConfiguration.sizeInsets.top = 10
collectionView.pagingConfiguration.sizeInsets.bottom = 10
collectionView.pagingConfiguration.alignment = .bottom

限制

它是如何工作的?

此库的工作原理是创建一个第二个隐藏的滚动视图(“pager”),该滚动视图具有与页面大小相同的大小,并且具有与实际滚动视图相同的 contentSize,并具有isPagingEnabled

因为我们的 pager 与我们的页面大小相同,所以当我们在 pager 中滚动时,我们将获得 iOS 使用的以及我们期望的确切分页行为。

然后,我们将 pager 的panGestureRecognizer添加到实际的滚动视图中,这样当您在实际的滚动视图中平移和滑动时,我们实际上会滚动 pager。

最后,我们将 pager 的contentOffset(对于对齐有一些额外的偏移量)与实际的滚动视图同步。