以编程方式使UICollectionViewController不显示单元格

时间:2017-07-27 12:22:38

标签: swift uicollectionview

背景为黑色,单元格为白色,但simulator?中没有任何单元格显示任何人都知道这可能是什么原因?< / p>

import UIKit
import Foundation

class ChatLog: UICollectionViewController, UITextFieldDelegate, UICollectionViewDelegateFlowLayout {

    let cellId = "cellId"

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView?.backgroundColor = UIColor.black
        collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)    
    }

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

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
        cell.backgroundColor = UIColor.white

        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: view.frame.height, height: 80)
    }

}

2 个答案:

答案 0 :(得分:4)

<强>更新

如下所示以编程方式初始化ChatLog视图控制器意味着不调用UICollectionView数据源方法,例如不调用collectionView(_:cellForItemAt:)

let newViewController = ChatLog(collectionViewLayout: UICollectionViewLayout())

替换为

let newViewController = ChatLog(collectionViewLayout: UICollectionViewFlowLayout())

-

当您声明UICollectionViewController时,实际上并不需要在代码中明确设置,即集合视图的delegatedataSource属性。

只需确保在Main.storyboard中,您已通过单击视图控制器然后单击身份检查器将UICollectionViewController的类设置为ChatLog。同时确保您已点击UICollectionViewCell并将其标识符设置为“cellId”。

如果这是一个多视图控制器项目,请确保可以通过使其成为初始视图控制器或从另一个视图控制器向此视图控制器提供segue /导航来导航到ChatLog视图控制器。

下面的图片概述了我的解决方案。

Storyboard Cell

Storyboard UICollectionViewController ChatLog

答案 1 :(得分:0)

设置delegate的{​​{1}}和数据源。仅当您设置了collectionViewdatasource时,才会调用delegatenumberOfItemsInSection方法(cellForItemAtIndexpathdelegate等)。您可以在代码或故事板中设置它(如果您使用故事板来设计datasource

collectionView中,您可以添加

viewDidLoad