如何让UITableViewCell显示其中的UICollectionView的整个高度?

时间:2017-03-17 12:53:58

标签: ios uitableview swift3 uicollectionview

我是UITableView,在我的其中一个单元格中,我已经以编程方式添加了UICollectionView

但是在显示UICollectionView之后,UITableViewCell只显示了UICollectionView的第一行as this picture

这是我的UITableView代码:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 5
}


  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 4 {
        let collectionViewCell = tableView.dequeueReusableCell(withIdentifier: "collectionViewCell", for: indexPath) as! collectionViewCell
        collectionViewCell.contentView.backgroundColor = hexStringToUIColor(hex: "#eeeeee")

        return collectionViewCell
    }
}

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
}

这是我的UITableView自定义Cell,其中包含UICollectionView:

      private class collectionViewCell : UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout  {

private let reuseableCell = "CellId"

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseableCell)
    setupViews()

}

override func layoutSubviews() {
    super.layoutSubviews()
}


let imagesCollectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
    collectionView.backgroundColor = UIColor.white
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    collectionView.showsHorizontalScrollIndicator = false
    collectionView.showsVerticalScrollIndicator = false
    return collectionView
}()


func setupViews() {
    backgroundColor = UIColor.black
    addSubview(imagesCollectionView)

    imagesCollectionView.dataSource = self
    imagesCollectionView.delegate = self
    imagesCollectionView.backgroundColor = hexStringToUIColor(hex: "#eeeeee")
    imagesCollectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseableCell)

    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": imagesCollectionView]))
    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": imagesCollectionView]))
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 5
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = imagesCollectionView.dequeueReusableCell(withReuseIdentifier: reuseableCell, for: indexPath)
    cell.backgroundColor = .green
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: 100, height: 200) // 68
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsetsMake(0, 0, 0, 0)
}

所以有什么帮助?

2 个答案:

答案 0 :(得分:1)

请添加以下heightForRowAt方法和estimatedRowHeight并检查

tableView.estimatedRowHeight = 100 //Any Value you want
tableView.rowHeight = UITableViewAutomaticDimension

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
    return UITableViewAutomaticDimension
}

答案 1 :(得分:1)

UICollectionView不会根据其内容自动增长,因此表格单元格也不会自动增长。

您必须为UICollectionView设置高度约束,并根据内容高度更改约束常量。然后,如果您为UICollectionView的边设置约束等于单元格的内容视图,则单元格也将自动调整高度。

希望这会有所帮助。