如何以编程方式将UICollectionView插入UITableViewCell? [迅速]

时间:2019-04-01 19:24:17

标签: swift xcode uitableview uicollectionview

有人知道如何将collectionView集成到tableView的顶部吗?我正在尝试获取具有水平滚动图像的顶部部分/行,以及它下面的其他部分/行只是普通的tableview行。就像您在诸如Facebook Messenger或tinder / bumble的“ matchs / conversation”页面之类的应用中看到的一样。

我了解如何分别生成UICollectionView和UITableView,但是在多个函数/代理/数据源之间,我不知道如何正确地分层代码。

我正在以编程方式工作,而不是在故事板上。我知道还有其他关于在UITableViewCell中插入UICollectionView的文章,但是它们要么是情节提要实现,要么是过时的Swift版本-如果有人可以进行演练,以便将来寻找的人也可以理解其逻辑,那将是很棒的即使某些代码已经过时。

2 个答案:

答案 0 :(得分:0)

在表视图的委托方法tableView(_:viewForHeaderInSection:)中,您可以返回您的collectionview。您可能还需要在tableView(_:heightForRowAt:)中设置标题视图的高度。

答案 1 :(得分:0)

  1. 在TableViewCell快捷文件中声明collectionView。

    var viewPhotos: UICollectionView!

  2. init函数或awakeFromNib中检查photoCollectionView是否已初始化并将其添加到单元格中。

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
 layout.scrollDirection = .horizontal        
 viewPhotos = UICollectionView(frame: self.bounds, collectionViewLayout: layout)
 viewPhotos.collectionViewLayout = layout
 viewPhotos.showsHorizontalScrollIndicator = false
 viewPhotos.isPagingEnabled = true        
 viewPhotos.register(PhotoCollectionViewCell.self, forCellWithReuseIdentifier: PhotoCollectionViewCell.cellIdentifier)
  1. 将UICollectionView数据源添加并委托给UITableViewCell
extension TableViewCell: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {  

func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection > section: Int) -> Int {
    return photoUrls?.count ?? 0
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: PhotoCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: PhotoCollectionViewCell.cellIdentifier, for: indexPath) as! PhotoCollectionViewCell

    if let value = photoUrls {
        cell.reset(with url: value[indexPath.row]);
    }
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: kPhotoWidth, height: kPhotoHeight)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt  section: Int) -> UIEdgeInsets {

    return UIEdgeInsets.init(top: 0, left: 0, bottom: 0, right: 0)

}

func collectionView(_ collectionView: UICollectionView, layout > collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 0.0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 0.0
}

}
  1. PhotoCollectionViewCell
  

创建一个从UICollectionViewCell派生的PhotoCollectionViewCell   并添加一个UIImageView,并将所有边缘约束设为0   监督。加载基于photoUrl的UIImageView。