【问题标题】:Swift - Scroll in Horizontal CollectionView stopped working inside a UIScrollViewSwift - 在水平 CollectionView 中滚动停止在 UIScrollView 内工作
【发布时间】:2016-10-12 19:08:43
【问题描述】:

这是一个棘手的问题......

我在 View Controller 中有一个 ScrollView,里面有多个 CollectionView。 CollectionViews 设置用于水平滚动的个人资料照片。

我希望 ScrollView 垂直滚动,而不是水平滚动。我使用以下代码对 ScrollView 执行此操作:

    func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.contentOffset.x>0 {
        scrollView.contentOffset.x = 0
    }

    if scrollView.contentOffset.x < 0 {
        scrollView.contentOffset.x = 0
    }
}

这按预期工作,我使用 UIScrollViewDelegate 并将 ScrollView 设置为:

self.scrollView.delegate = self

现在棘手的部分... CollectionViews 不再水平滚动。我假设这是因为父 ScrollView 正在接管视图,和/或上面的代码也阻止了 CollectionViews 中的水平滚动。

有人对我如何实现我的目标有一些想法吗?

干杯, 亚伦

【问题讨论】:

  • 跟进,当我注释掉代码时,滚动再次按预期在 CollectionViews 上工作。但是,ScrollView 也可以水平和垂直滚动 - 当我只希望 ScrollView 垂直滚动并且内部的 CollectionViews 水平滚动时。
  • 你试试我的答案吗?

标签: ios uiscrollview uicollectionview


【解决方案1】:

在你的 scrollViewDidScroll 方法中尝试这样的事情

func scrollViewDidScroll(scrollView: UIScrollView) {
    if (scrollView == self.scrollView) {
        if scrollView.contentOffset.x>0 {
            scrollView.contentOffset.x = 0
        }

        if scrollView.contentOffset.x < 0 {
            scrollView.contentOffset.x = 0
        }
    }
}

因为collectionView也有scrollView的委托。
希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    我建议在您的情况下使用UICollectionView 而不是UIScrollView。似乎您的水平滚动图像集合非常相似,因此将每个图像表示为高级父 UICollectionView 的原型单元会更合乎逻辑。这也将以自然的方式解决您的滚动问题 =)

    更准确地说,您将有一个 parent UICollectionView,滚动方向设置为 Vertical,拥有一个 UICollectionViewCell,内部 child UICollectionView 具有滚动方向设置为水平。

    以下是使用情节提要如何做到这一点的示例(查看第二个原型单元):

    在您的情况下,您只需要使用图像而不是我的示例中使用的标签来填充子 UICollectionView

    希望,这会对您有所帮助。祝你好运!

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2011-10-16
      • 2015-11-18
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      相关资源
      最近更新 更多