Objective c 调整CollectionView高度后,集合视图单元格不显示

Objective c 调整CollectionView高度后,集合视图单元格不显示,objective-c,swift3,uicollectionview,Objective C,Swift3,Uicollectionview,我面临UICollectionView单元格大小问题。我使用两个集合视图和一个表格视图1:-主集合视图,用于刷卡,一次仅显示一个单元格2:-在主集合视图内,我使用表格视图,现在在表格视图内,我使用集合视图,一次显示6个单元格 现在整个过程是我使用一个布局,它是可滑动的,在一个页面上显示6个项目,以此类推 问题是,当我将主单元格高度设置为200时,collectionview单元格内的显示结果与预期不符。 外部集合视图类 import UIKit class ViewController: UI

我面临UICollectionView单元格大小问题。我使用两个集合视图和一个表格视图1:-主集合视图,用于刷卡,一次仅显示一个单元格2:-在主集合视图内,我使用表格视图,现在在表格视图内,我使用集合视图,一次显示6个单元格

现在整个过程是我使用一个布局,它是可滑动的,在一个页面上显示6个项目,以此类推

问题是,当我将主单元格高度设置为200时,collectionview单元格内的显示结果与预期不符。

外部集合视图类

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var collectionMain: UICollectionView!
    @IBOutlet weak var tableView: UITableView!
    let itemsPerRow: CGFloat = 1
    let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

extension ViewController:UICollectionViewDataSource,UICollectionViewDelegate {
    //1
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

    //3
    func collectionView(_ collectionView: UICollectionView,
                        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:cellCollectionCollectionViewCell! = collectionView.dequeueReusableCell(withReuseIdentifier: "cellSwipe",
                                                                                        for: indexPath) as! cellCollectionCollectionViewCell

        switch indexPath.item {
        case 0:
            cell.backgroundColor = UIColor.black
            cell.setupCollectionTableCell(indexPath)
            break
        case 1:  cell.backgroundColor = UIColor.red
        cell.setupCollectionTableCell(indexPath)
            break

        default:
            cell.backgroundColor = UIColor.yellow
            cell.setupCollectionTableCell(indexPath)
            break
        }
        // Configure the cell
        return cell
    }


}
extension ViewController : UICollectionViewDelegateFlowLayout {
    //1
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        //2
        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = self.collectionMain.frame.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

        return CGSize(width: widthPerItem, height: widthPerItem)
    }

    //3
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return sectionInsets
    }

    // 4
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}
import UIKit

class Constant {
    static let totalItem: CGFloat = 9
    static let column: CGFloat = 3

    static let minLineSpacing: CGFloat = 1.0
    static let minItemSpacing: CGFloat = 1.0

    static let offset: CGFloat = 1.0 // TODO: for each side, define its offset

    static func getItemWidth(boundWidth: CGFloat) -> CGFloat {

        let totalWidth = boundWidth - (offset + offset) - ((column - 1) * minItemSpacing)

        return totalWidth / column        
    }
}
import UIKit

class CollectionCell: UITableViewCell {

    @IBOutlet weak var collectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()

        if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.sectionInset = UIEdgeInsetsMake(
                Constant.offset,    // top
                Constant.offset,    // left
                Constant.offset,    // bottom
                Constant.offset     // right
            )

            layout.minimumInteritemSpacing = Constant.minItemSpacing
            layout.minimumLineSpacing = Constant.minLineSpacing
        }

        collectionView.isScrollEnabled = false
        collectionView.dataSource = self
        collectionView.delegate = self
    }

}

extension CollectionCell: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Int(Constant.totalItem)
    }

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

extension CollectionCell: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let itemWidth = Constant.getItemWidth(boundWidth: collectionView.bounds.size.width)

        return CGSize(width: itemWidth, height: 50)
    }
}
import UIKit

class cellCollectionCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var tblView: UITableView!
    var indexPath:IndexPath?

    func setupCollectionTableCell(_ row:IndexPath){

            self.indexPath = row
            self.tblView.delegate = self
            self.tblView.dataSource = self
            //   self.tblView.estimatedRowHeight = 300
            self.tblView.reloadData()

    }
}
extension cellCollectionCollectionViewCell:UITableViewDelegate,UITableViewDataSource{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        switch indexPath.row {
        case 0:
            return 50
        case 1:
            let itemHeight = Constant.getItemWidth(boundWidth: tableView.bounds.size.width)

            let totalRow = ceil(Constant.totalItem / Constant.column)

            let totalTopBottomOffset = Constant.offset + Constant.offset

            let totalSpacing = CGFloat(totalRow - 1) * Constant.minLineSpacing

            let totalHeight  = ((itemHeight * CGFloat(totalRow)) + totalTopBottomOffset + totalSpacing)
            print("total height  \(totalHeight)")

            return totalHeight
        default:
            return UITableViewAutomaticDimension
        }
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        switch indexPath.row {
//        case 0:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath)
//            return cell
//        default:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
//            return cell
//        }
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell

    }
模型常数类

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var collectionMain: UICollectionView!
    @IBOutlet weak var tableView: UITableView!
    let itemsPerRow: CGFloat = 1
    let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

extension ViewController:UICollectionViewDataSource,UICollectionViewDelegate {
    //1
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

    //3
    func collectionView(_ collectionView: UICollectionView,
                        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:cellCollectionCollectionViewCell! = collectionView.dequeueReusableCell(withReuseIdentifier: "cellSwipe",
                                                                                        for: indexPath) as! cellCollectionCollectionViewCell

        switch indexPath.item {
        case 0:
            cell.backgroundColor = UIColor.black
            cell.setupCollectionTableCell(indexPath)
            break
        case 1:  cell.backgroundColor = UIColor.red
        cell.setupCollectionTableCell(indexPath)
            break

        default:
            cell.backgroundColor = UIColor.yellow
            cell.setupCollectionTableCell(indexPath)
            break
        }
        // Configure the cell
        return cell
    }


}
extension ViewController : UICollectionViewDelegateFlowLayout {
    //1
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        //2
        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = self.collectionMain.frame.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

        return CGSize(width: widthPerItem, height: widthPerItem)
    }

    //3
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return sectionInsets
    }

    // 4
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}
import UIKit

class Constant {
    static let totalItem: CGFloat = 9
    static let column: CGFloat = 3

    static let minLineSpacing: CGFloat = 1.0
    static let minItemSpacing: CGFloat = 1.0

    static let offset: CGFloat = 1.0 // TODO: for each side, define its offset

    static func getItemWidth(boundWidth: CGFloat) -> CGFloat {

        let totalWidth = boundWidth - (offset + offset) - ((column - 1) * minItemSpacing)

        return totalWidth / column        
    }
}
import UIKit

class CollectionCell: UITableViewCell {

    @IBOutlet weak var collectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()

        if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.sectionInset = UIEdgeInsetsMake(
                Constant.offset,    // top
                Constant.offset,    // left
                Constant.offset,    // bottom
                Constant.offset     // right
            )

            layout.minimumInteritemSpacing = Constant.minItemSpacing
            layout.minimumLineSpacing = Constant.minLineSpacing
        }

        collectionView.isScrollEnabled = false
        collectionView.dataSource = self
        collectionView.delegate = self
    }

}

extension CollectionCell: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Int(Constant.totalItem)
    }

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

extension CollectionCell: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let itemWidth = Constant.getItemWidth(boundWidth: collectionView.bounds.size.width)

        return CGSize(width: itemWidth, height: 50)
    }
}
import UIKit

class cellCollectionCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var tblView: UITableView!
    var indexPath:IndexPath?

    func setupCollectionTableCell(_ row:IndexPath){

            self.indexPath = row
            self.tblView.delegate = self
            self.tblView.dataSource = self
            //   self.tblView.estimatedRowHeight = 300
            self.tblView.reloadData()

    }
}
extension cellCollectionCollectionViewCell:UITableViewDelegate,UITableViewDataSource{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        switch indexPath.row {
        case 0:
            return 50
        case 1:
            let itemHeight = Constant.getItemWidth(boundWidth: tableView.bounds.size.width)

            let totalRow = ceil(Constant.totalItem / Constant.column)

            let totalTopBottomOffset = Constant.offset + Constant.offset

            let totalSpacing = CGFloat(totalRow - 1) * Constant.minLineSpacing

            let totalHeight  = ((itemHeight * CGFloat(totalRow)) + totalTopBottomOffset + totalSpacing)
            print("total height  \(totalHeight)")

            return totalHeight
        default:
            return UITableViewAutomaticDimension
        }
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        switch indexPath.row {
//        case 0:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath)
//            return cell
//        default:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
//            return cell
//        }
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell

    }
表格单元格类

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var collectionMain: UICollectionView!
    @IBOutlet weak var tableView: UITableView!
    let itemsPerRow: CGFloat = 1
    let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

extension ViewController:UICollectionViewDataSource,UICollectionViewDelegate {
    //1
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

    //3
    func collectionView(_ collectionView: UICollectionView,
                        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:cellCollectionCollectionViewCell! = collectionView.dequeueReusableCell(withReuseIdentifier: "cellSwipe",
                                                                                        for: indexPath) as! cellCollectionCollectionViewCell

        switch indexPath.item {
        case 0:
            cell.backgroundColor = UIColor.black
            cell.setupCollectionTableCell(indexPath)
            break
        case 1:  cell.backgroundColor = UIColor.red
        cell.setupCollectionTableCell(indexPath)
            break

        default:
            cell.backgroundColor = UIColor.yellow
            cell.setupCollectionTableCell(indexPath)
            break
        }
        // Configure the cell
        return cell
    }


}
extension ViewController : UICollectionViewDelegateFlowLayout {
    //1
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        //2
        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = self.collectionMain.frame.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

        return CGSize(width: widthPerItem, height: widthPerItem)
    }

    //3
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return sectionInsets
    }

    // 4
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}
import UIKit

class Constant {
    static let totalItem: CGFloat = 9
    static let column: CGFloat = 3

    static let minLineSpacing: CGFloat = 1.0
    static let minItemSpacing: CGFloat = 1.0

    static let offset: CGFloat = 1.0 // TODO: for each side, define its offset

    static func getItemWidth(boundWidth: CGFloat) -> CGFloat {

        let totalWidth = boundWidth - (offset + offset) - ((column - 1) * minItemSpacing)

        return totalWidth / column        
    }
}
import UIKit

class CollectionCell: UITableViewCell {

    @IBOutlet weak var collectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()

        if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.sectionInset = UIEdgeInsetsMake(
                Constant.offset,    // top
                Constant.offset,    // left
                Constant.offset,    // bottom
                Constant.offset     // right
            )

            layout.minimumInteritemSpacing = Constant.minItemSpacing
            layout.minimumLineSpacing = Constant.minLineSpacing
        }

        collectionView.isScrollEnabled = false
        collectionView.dataSource = self
        collectionView.delegate = self
    }

}

extension CollectionCell: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Int(Constant.totalItem)
    }

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

extension CollectionCell: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let itemWidth = Constant.getItemWidth(boundWidth: collectionView.bounds.size.width)

        return CGSize(width: itemWidth, height: 50)
    }
}
import UIKit

class cellCollectionCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var tblView: UITableView!
    var indexPath:IndexPath?

    func setupCollectionTableCell(_ row:IndexPath){

            self.indexPath = row
            self.tblView.delegate = self
            self.tblView.dataSource = self
            //   self.tblView.estimatedRowHeight = 300
            self.tblView.reloadData()

    }
}
extension cellCollectionCollectionViewCell:UITableViewDelegate,UITableViewDataSource{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        switch indexPath.row {
        case 0:
            return 50
        case 1:
            let itemHeight = Constant.getItemWidth(boundWidth: tableView.bounds.size.width)

            let totalRow = ceil(Constant.totalItem / Constant.column)

            let totalTopBottomOffset = Constant.offset + Constant.offset

            let totalSpacing = CGFloat(totalRow - 1) * Constant.minLineSpacing

            let totalHeight  = ((itemHeight * CGFloat(totalRow)) + totalTopBottomOffset + totalSpacing)
            print("total height  \(totalHeight)")

            return totalHeight
        default:
            return UITableViewAutomaticDimension
        }
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        switch indexPath.row {
//        case 0:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath)
//            return cell
//        default:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
//            return cell
//        }
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell

    }
主收集单元类

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var collectionMain: UICollectionView!
    @IBOutlet weak var tableView: UITableView!
    let itemsPerRow: CGFloat = 1
    let sectionInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)
    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

extension ViewController:UICollectionViewDataSource,UICollectionViewDelegate {
    //1
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

    //3
    func collectionView(_ collectionView: UICollectionView,
                        cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:cellCollectionCollectionViewCell! = collectionView.dequeueReusableCell(withReuseIdentifier: "cellSwipe",
                                                                                        for: indexPath) as! cellCollectionCollectionViewCell

        switch indexPath.item {
        case 0:
            cell.backgroundColor = UIColor.black
            cell.setupCollectionTableCell(indexPath)
            break
        case 1:  cell.backgroundColor = UIColor.red
        cell.setupCollectionTableCell(indexPath)
            break

        default:
            cell.backgroundColor = UIColor.yellow
            cell.setupCollectionTableCell(indexPath)
            break
        }
        // Configure the cell
        return cell
    }


}
extension ViewController : UICollectionViewDelegateFlowLayout {
    //1
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        //2
        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = self.collectionMain.frame.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

        return CGSize(width: widthPerItem, height: widthPerItem)
    }

    //3
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return sectionInsets
    }

    // 4
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}
import UIKit

class Constant {
    static let totalItem: CGFloat = 9
    static let column: CGFloat = 3

    static let minLineSpacing: CGFloat = 1.0
    static let minItemSpacing: CGFloat = 1.0

    static let offset: CGFloat = 1.0 // TODO: for each side, define its offset

    static func getItemWidth(boundWidth: CGFloat) -> CGFloat {

        let totalWidth = boundWidth - (offset + offset) - ((column - 1) * minItemSpacing)

        return totalWidth / column        
    }
}
import UIKit

class CollectionCell: UITableViewCell {

    @IBOutlet weak var collectionView: UICollectionView!

    override func awakeFromNib() {
        super.awakeFromNib()

        if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            layout.sectionInset = UIEdgeInsetsMake(
                Constant.offset,    // top
                Constant.offset,    // left
                Constant.offset,    // bottom
                Constant.offset     // right
            )

            layout.minimumInteritemSpacing = Constant.minItemSpacing
            layout.minimumLineSpacing = Constant.minLineSpacing
        }

        collectionView.isScrollEnabled = false
        collectionView.dataSource = self
        collectionView.delegate = self
    }

}

extension CollectionCell: UICollectionViewDataSource {
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return Int(Constant.totalItem)
    }

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

extension CollectionCell: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let itemWidth = Constant.getItemWidth(boundWidth: collectionView.bounds.size.width)

        return CGSize(width: itemWidth, height: 50)
    }
}
import UIKit

class cellCollectionCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var tblView: UITableView!
    var indexPath:IndexPath?

    func setupCollectionTableCell(_ row:IndexPath){

            self.indexPath = row
            self.tblView.delegate = self
            self.tblView.dataSource = self
            //   self.tblView.estimatedRowHeight = 300
            self.tblView.reloadData()

    }
}
extension cellCollectionCollectionViewCell:UITableViewDelegate,UITableViewDataSource{

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        switch indexPath.row {
        case 0:
            return 50
        case 1:
            let itemHeight = Constant.getItemWidth(boundWidth: tableView.bounds.size.width)

            let totalRow = ceil(Constant.totalItem / Constant.column)

            let totalTopBottomOffset = Constant.offset + Constant.offset

            let totalSpacing = CGFloat(totalRow - 1) * Constant.minLineSpacing

            let totalHeight  = ((itemHeight * CGFloat(totalRow)) + totalTopBottomOffset + totalSpacing)
            print("total height  \(totalHeight)")

            return totalHeight
        default:
            return UITableViewAutomaticDimension
        }
    }

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//        switch indexPath.row {
//        case 0:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath)
//            return cell
//        default:
//            let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
//            return cell
//        }
        let cell = tableView.dequeueReusableCell(withIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
        return cell

    }

下面是图像的链接