一个 UIViewController 中的两个 UICollectionView
Posted
技术标签:
【中文标题】一个 UIViewController 中的两个 UICollectionView【英文标题】:Two UICollectionViews in One UIViewController 【发布时间】:2020-09-28 22:48:46 【问题描述】:我在一个视图控制器中有两个 UICollectionView,但是我的第一个集合视图符合我的第二个集合视图的委托和数据源。
问题在于类别集合视图符合服务集合视图的大小,并且它试图返回五个单元格。
如何让我的委托和数据源识别并符合两个不同的集合视图?谢谢!
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)
// MARK: - 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
// MARK: - 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)
【问题讨论】:
看起来你做了你想要达到的目标 差不多,但是类别集合视图符合服务集合视图的大小,它正在尝试返回五个单元格 我的类别集合视图没有显示五个,但它像滚动一样滚动 【参考方案1】:不要对多个集合视图使用相同的布局对象:
let categoryLayout = UICollectionViewFlowLayout()
categoryLayout.scrollDirection = .horizontal
categoryCollectionView.collectionViewLayout = categoryLayout
let serviceLayout = UICollectionViewFlowLayout()
serviceLayout.scrollDirection = .horizontal
serviceCollectionView.collectionViewLayout = serviceLayout
【讨论】:
以上是关于一个 UIViewController 中的两个 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章
两个 UIViewController 的不同 UITableView 中的一个自定义 UITableViewCell
如何将 UISearchBar 添加到同一 UIViewController 中的两个 TableView