UICollectionView 以编程方式添加到 UITableViewCell 中,但没有出现?

Posted

技术标签:

【中文标题】UICollectionView 以编程方式添加到 UITableViewCell 中,但没有出现?【英文标题】:UICollectionView added inside UITableViewCell programmatically, but doesn't appear? 【发布时间】:2017-03-17 10:20:11 【问题描述】:

我从情节提要创建了 UItableView,这就是我使用 cellForRowAt indexPath func 的方式

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    if indexPath.row == 0 
        let titleCell = tableView.dequeueReusableCell(withIdentifier: "titleCell", for: indexPath) as! MenuTableViewCell

        titleCell.label.text = newsTitle

        return titleCell
    else if indexPath.row == 1 
        let collectionViewCell = tableView.dequeueReusableCell(withIdentifier: "collectionViewCell", for: indexPath) as! collectionViewCell

        return collectionViewCell
    

    let cell = UITableViewCell()
    return cell

我以编程方式为 UICollectionView 创建了这个类:

private class collectionViewCell : UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate 

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)



override func layoutSubviews() 
    super.layoutSubviews()



let imagesCollectionView: UICollectionView = 
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    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


    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 = UICollectionViewCell()
    cell.backgroundColor = .green
    return cell


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: 100, height: frame.height - 68)


如你所见,我已经更改了 UICollectionView 及其单元格的颜色,但 UITableView 中没有任何颜色。

在我运行应用程序后什么也没发生,所以我在这里犯了什么错误吗?

【问题讨论】:

你设置了 UICollectionView delegate 和 datasorse 吗? 设置collectionview的frame let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) 【参考方案1】:

您的 setupViews() 方法似乎没有被调用。考虑在初始化程序中调用它。

【讨论】:

非常感谢这篇笔记,我也应该从 UICollectionView 注册单元格 不错不错!另附注:您的 collectionViewCell 类名应该大写。 绝对是兄弟。【参考方案2】:

您试图在您的 UICollectionViewCell 中继承 UITableViewCell

这个:

private class collectionViewCell : UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate

应该是:

private class collectionViewCell : UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate

【讨论】:

以上是关于UICollectionView 以编程方式添加到 UITableViewCell 中,但没有出现?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 以编程方式添加到 UITableViewCell 中,但没有出现?

以编程方式使用自动布局将子视图添加到 UICollectionView 不起作用

以编程方式添加 UICollectionView 时应用程序崩溃

如何以编程方式创建和使用 UIcollectionView?

如何以编程方式在 UICollectionView 上添加自动布局?

有没有办法以编程方式向 UICollectionView 单元格添加填充?