自定义 UIView 添加到视图后 UICollectionView 不滚动

Posted

技术标签:

【中文标题】自定义 UIView 添加到视图后 UICollectionView 不滚动【英文标题】:UICollectionView not scrolling after custom UIView added to view 【发布时间】:2019-05-25 09:10:12 【问题描述】:

我在添加 UICollectionView 后尝试添加自定义 UIView,因为我想在集合视图上方显示自定义栏视图。这是我的代码:

func loadFilters() 
    let categoriesFlowLayout = UICollectionViewFlowLayout()
    categoriesFlowLayout.scrollDirection = .vertical

    categoriesCollection = UICollectionView(frame: CGRect(x: 10, y: getY(yAxis: searchField) + 10, width: view.frame.size.width - 20, height: (view.frame.size.height * 9 / 10) - getY(yAxis: searchField) - 10), collectionViewLayout: categoriesFlowLayout)
    categoriesCollection.register(categoriesCell.self, forCellWithReuseIdentifier: "categoriesCell")
    categoriesCollection.delegate = self
    categoriesCollection.dataSource = self
    categoriesCollection.backgroundColor = UIColor.clear
    categoriesCollection.showsVerticalScrollIndicator = false
    categoriesCollection.showsHorizontalScrollIndicator = false
    view.addSubview(categoriesCollection)

    addBar()
    categoriesCollection.isUserInteractionEnabled = true

addBar() 函数在自定义超类 ViewController 中声明

如果在view.addSubview(categoriesCollection) 之前调用addBar(),它看起来像下图,但如果在之后调用它,那么我的集合视图不会滚动或识别触摸。无论如何都会使集合视图滚动并将自定义栏放在前面? 我也使用过sendSubviewToBack()bringSubviewToFront() 函数,但结果是一样的

【问题讨论】:

运行您的应用程序并单击调试视图层次结构并检查是否有任何其他视图位于您的集合视图之上 【参考方案1】:

当您在另一个视图上方插入视图时,顶视图会获取所有触摸事件。所以UICollectionView 不再接收任何触摸事件,因为它上面有另一个视图。

正如我从您的帖子中看到的,您只需要屏幕底部的栏。因此,请检查您的自定义 UIView 的大小。它可能会填满整个屏幕并且完全位于UICollectionView 之上。只需给 UIView 某种背景颜色,然后看看它填充了多少空间。

如果这不起作用,您可以在自定义UIView 上使用UIGestureRecognizer,并将触摸事件转发到UICollectionView

【讨论】:

底栏已有背景色。如果我要添加一个手势识别器,我将不得不将它添加到 18 个视图控制器和许多按钮中。还有其他方法吗? 是的,底栏已经有了背景色。但是也有(

以上是关于自定义 UIView 添加到视图后 UICollectionView 不滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将自定义 uiview 添加到视图控制器 SWIFT

将 xib 中的子视图添加到自定义 UIView

将自定义 UIView 添加到 TableViewCell

自定义 UIView 子类添加 nib 子视图

是否可以将 GestureRecognizer 添加到自定义 UIView 子视图中的标签

如何将 UIView 添加到 CALayer