集合视图单元格未出现

Collection View Cells not appearing

我想显示与 buttons 一样多的 collectionViewCells,因为我的数组中有字符串。但是当我启动模拟器时,只有 CollectionView 的背景,但没有显示单元格。可能是什么错误?

这是我的 CollectionViewController 的代码,我附加到 main.storyboard 中的 CollectionView:

class CollectionViewController: UICollectionViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Array = ["1","2","3","4","5"]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int {
    return Array.count
}

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        button.titleLabel?.text = Array[indexPath.row]

        return cell
}

}

这些是集合视图控制器的连接:

故事板上的视图控制器:

func layoutCells() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)
        layout.minimumInteritemSpacing = 5.0
        layout.minimumLineSpacing = 5.0
        layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3))
        collectionView!.collectionViewLayout = layout
    }

试试这个。从已加载的视图中调用此函数。我认为问题是您的 collection 布局不正确。

func viewDidLoad() {
    layoutCells()
}

如果可行,您可以修改布局选项以满足您的需要。

您是否将 CollectionViewController 设置为故事板身份检查器? :)

viewDidLoad 方法中更改数据后,我会尝试调用 reloadData()

希望对您有所帮助

想法:

  • 检查您的小区重用标识符是否已设置。
  • 检查您是否在故事板中正确设置了集合视图子类。
  • print 语句放入您的 cellForItemAtIndexPath 函数中,看看它是否被调用过。
  • 不确定这是否是一个问题,但 Array 实际上是 Swift 中的一个类型。使用它作为您的变量名可能会以某种方式扰乱逻辑。将其重命名为 array(小写)。我相信无论如何这是变量名的最佳实践。
  • cellForItemAtIndexPath 中的单元格执行其他操作,例如更改背景颜色。如果可行,则可能是您对标签所做的操作有问题。

你的问题在

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

方法签名。这是错误的。应该是

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

override 规范(因为 UICollectionViewController 有自己的,这就是为什么你得到空集合)。

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return Array.count
}

首先检查你是否使用过这个方法:-

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}

每个部分有一个搜索,所以部分的数量是搜索数组的计数。所以我们也可以根据需要使用这个 method.by 默认值我们可以使用 retuen 1

并按照 Link 中的步骤以获得更好的解决方案 Check this link

Select故事板中的UIButton,勾选下图中左下角的installed

问题在于将标题设置为按钮,请使用以下代码。

override func
    collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        //button.titleLabel?.text = Array[indexPath.row]
        button.setTitle(Array[indexPath.row], forState: UIControlState.Normal)
        return cell
}

希望对您有所帮助

确保为单元格设置了正确的重用标识符。

我有一个类似的问题,我发现这在某种程度上限制了我的单元格的大小。希望这有帮助。

检查您是否在故事板中设置了 CollectionView 出口(数据源、委托),如下所示

我从 CollectionViewController.m 文件中删除了这段代码

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];

然后出现单元格

检查以确保单元格未隐藏。在下面添加此代码

    cell.isHidden = false

单元格中的项目没有为我显示,因为我在以编程方式添加子视图时没有为每个添加的子视图设置 tamic。

subview.translatesAutoresizingMaskIntoConstraints = false