首页 > 解决方案 > 自定义 UIView 添加到视图后 UICollectionView 不滚动

问题描述

我想在添加 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 中声明

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

自定义栏

标签: swift

解决方案


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

正如我从您的帖子中看到的那样,您只需要屏幕底部的栏。所以检查你自定义的大小UIView。它可能会填满整个屏幕并且完全在UICollectionView. 只需给UIView某种背景颜色,看看它填充了多少空间。

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


推荐阅读