一个 UIViewController 中的两个 UICollectionView

Two UICollectionViews in One UIViewController

我在一个视图控制器中有两个 UICollectionView,但是我的第一个集合视图符合我的第二个集合视图的委托和数据源。

问题是类别集合视图符合服务集合视图的大小,它正在尝试 return 五个单元格。

如何让我的委托和数据源识别并符合这两种不同的集合视图?谢谢!

My App Screen Image

// 家庭控制器

private let categoryCollectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: 120, height: 120),    
                                                      collectionViewLayout: UICollectionViewFlowLayout())
private let serviceCollectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: 120, height: 120),
                                                     collectionViewLayout: UICollectionViewLayout())


    fileprivate func configureUI() {
    
        let layout = UICollectionViewFlowLayout()
        layout.scrollDirection = .horizontal
            
        popularCategoryCardView.addSubview(categoryCollectionView)
        categoryCollectionView.backgroundColor = .white
        categoryCollectionView.collectionViewLayout = layout
        categoryCollectionView.isScrollEnabled = true
        categoryCollectionView.delegate = self
        categoryCollectionView.dataSource = self
        categoryCollectionView.register(CategoryCell.self, forCellWithReuseIdentifier: CellIdentifiers.CategoryCell)
            
        categoryCollectionView.anchor(left: popularCategoryCardView.leftAnchor, bottom: popularCategoryCardView.bottomAnchor,
                                      right: popularCategoryCardView.rightAnchor, paddingLeft: 8, paddingBottom: 8, paddingRight: 8, height: 120)

        popularServiceCardView.addSubview(serviceCollectionView)
        serviceCollectionView.backgroundColor = .white
        serviceCollectionView.collectionViewLayout = layout
        serviceCollectionView.isScrollEnabled = true
        serviceCollectionView.delegate = self
        serviceCollectionView.dataSource = self
        serviceCollectionView.register(ServiceCell.self, forCellWithReuseIdentifier: CellIdentifiers.ServiceCell)
        
        serviceCollectionView.anchor(left: popularServiceCardView.leftAnchor, bottom: popularServiceCardView.bottomAnchor,
                                     right: popularServiceCardView.rightAnchor, paddingLeft: 8, paddingBottom: 8, paddingRight: 8, height: 150) 
    
    }

// 标记:- UICollectionViewDataSource

extension HomeController: UICollectionViewDataSource {
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if collectionView == self.categoryCollectionView {
            return jobCategory.count
        } else {
            return 5
        }
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        if collectionView == self.categoryCollectionView {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellIdentifiers.CategoryCell, for: indexPath) as! CategoryCell
            cell.jobCategory = jobCategory[indexPath.item]
            return cell
        } else {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellIdentifiers.ServiceCell, for: indexPath) as! ServiceCell
            return cell
        }
    }
    
}

// 标记:- UICollectionViewDelegateFlowLayout

extension HomeController: UICollectionViewDelegateFlowLayout {
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if collectionView == self.categoryCollectionView {
            return CGSize(width: 160, height: 120)
        } else {
            return CGSize(width: 100, height: 140)
        }
    }
    
}

不要对多个集合视图使用相同的布局对象:

let categoryLayout = UICollectionViewFlowLayout()
categoryLayout.scrollDirection = .horizontal

categoryCollectionView.collectionViewLayout = categoryLayout

let serviceLayout = UICollectionViewFlowLayout()
serviceLayout.scrollDirection = .horizontal

serviceCollectionView.collectionViewLayout = serviceLayout