【问题标题】:Embedding a UICollectionView in a UIScrollView works almost perfectly在 UIScrollView 中嵌入 UICollectionView 几乎可以完美地工作
【发布时间】:2018-06-22 13:26:45
【问题描述】:

背景

我在UIScrollView 中嵌入了UICollectionView,它几乎可以完美运行。

目标

一旦到达 contentViews 的末尾,可滚动元素就应该无缝地离开滚动条。当我在 UIScrollView 上向下滑动时,它应该向下滚动,以便 UICollectionView 占据大约 90% 的屏幕,然后继续滚动 collectionView。反之亦然,当我在 collectionView 上向上滚动并到达 collectionView 内容的顶部时,scrollview 应该开始向上滚动。

问题

1) 当我在 collectionView 上向上滚动时,它会滚动到顶部并停止。如果我向下轻弹几次,它仍然会反弹 collectionView 而不是向上滚动 scrollView。为了让父 ScrollView 向上滚动,我必须再次“故意”点击 collectionView 一次。

见 gif:

我想这与CancelContentTouches 有关,但我无法获得正确的组合。

2) 当我向下滚动时,同样的事情,一旦滚动视图到达 contentView 的末尾,它就会停止并弹跳。

见 gif:

注意:我意识到不建议将 UICollectionView 放在 UIScrollView 中。我尝试了下面列出的替代方案,但我无法通过将我的顶视图放在标题中来达到预期的效果。我希望能够独立滚动两者,所以我决定使用 scrollview/collectionView 组合。

查看层次结构

主视图控制器
- 滚动视图
-- 个人资料统计
-- CollectionViewContainerView
--- 集合视图

资源其他人出于某种原因希望将 collectionViews 放入 scrollViews:
我尝试了它们,但它们不适用于我的用例。

【问题讨论】:

  • 我确定这是第一响应者的问题。看你如何通过它。也许在某个偏移量处,您可以使用 becomeFirstResponder()。可能必须同时在滚动视图上结合辞职第一响应者。反之亦然
  • 您可以在 Twitter 的 iOS 应用的配置文件视图中看到平滑滚动。我试图复制它并取得与您相同的进展,然后卡住了。我在开发此功能时尝试了@abigson007 的答案,但它不起作用,因为 CollectionView 上方的视图也需要响应滚动事件。
  • 你有没有最终弄清楚这个?

标签: ios uiscrollview uicollectionview gesture-recognition uiview-hierarchy


【解决方案1】:

如果您在另一个滚动视图或它的子类中使用滚动视图或它的子类,那么它就会发生。

现在,您可以做一件事。禁用一个滚动(推荐内部滚动视图)并实现滚动视图的委托,如scrollViewDidScroll 或其他更合适的并手动滚动内部滚动视图(通过设置内部滚动视图的content offset)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多