【问题标题】:UICollectionView - Horizontal paging with 3 pages visible and 1 in the middle using UICollectionView [duplicate]UICollectionView - 使用 UICollectionView 在中间显示 3 个页面和 1 个页面的水平分页 [重复]
【发布时间】:2013-01-09 13:32:38
【问题描述】:

我正在尝试实现与使用 UICollectionView 在不同页面之间滚动时移动 Safari 相同的功能。一页在中间,其他部分也可见。

我正在努力使用 UICollectionView 实现这样的行为。有一种方法我找到了如何在一个屏幕上放置 3 页 - 使页面更小并设置适当的插图。但是,一旦我将页面设置为更小并启用了分页,页面就不会像应有的那样滚动到中心。我也可以禁用分页并在 UICollectionViewFlowLayout 的子类中使用此方法:

- (CGRect)rectForTargetPageForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

在这种方法中,我可以准确设置 UICollectionView 将停止的位置。但是,滚动体验不如使用启用分页的 UIScrollview 好。当我以更大的速度滑动时,滚动了几页并停在建议的页面上。我想要实现的是与启用分页的普通滚动视图相同的行为——无论我使用什么速度,我只会多得到 1 页。

有人知道如何使用 UICollectionView 解决这个问题吗?

【问题讨论】:

  • 为什么不能忽略该方法中的velocity 参数并返回下一页的矩形?
  • 我试过了,滚动对我来说似乎很奇怪。它不如启用分页。

标签: ios uicollectionview horizontal-scrolling scroll-paging


【解决方案1】:

所以你想让页面的大小小于滚动视图的大小,对吗?页面大小总是与滚动视图的大小相同,因此您必须缩小滚动视图

那么还有一个问题。 如何接收滚动视图边界之外的触摸

覆盖滚动视图的-[UIView pointInside:withEvent:] 以检查比实际更大的边界。然后触摸应该可以工作。


事实上我自己并没有尝试过,我是通过在上方放置带有所需边界的补充视图并覆盖-[UIView hitTest:withEvent:]来做到这一点的。在里面我修改了点并称为滚动视图命中测试。这样触摸是由滚动视图处理的,但它们的位置是错误的。您可能想尝试结合这两种方法来获得正确的位置。

【讨论】:

  • 我没有问题,我只需要在一个滚动视图中有 3 个页面并启用分页。但问题是只有当一页与整个集合视图具有相同的帧大小时,分页才适合。如果我创建较小的页面,以便我可以看到其他 2 个页面,则分页无法正常工作。当我将 clipsToBounds 设置为 NO 时,超出范围的页面会立即从视图层次结构中删除。
  • 我不认为你可以用它做点什么。您可以仅使用滚动视图和手动插入页面来实现它。
  • 我找到了解决方案。我必须设置分页启用,将剪辑设置为“否”,然后重叠项目。在流布局子类中,我必须返回不重叠的内容大小,以便单元格不会从视图层次结构中删除,它们会滚动到边界之外。将不得不稍微调整它,但它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多