我从story board创建了一个集合视图控制器,并将其自定义类设置为ItemCollectionVC
,将其单元格的自定义类设置为ItemCell
,并将其重用标识符设置为Cell
下面是我的ItemCollectionVC
类:
import UIKit
private let reuseIdentifier = "Cell"
class ItemCollectionVC: UICollectionViewController {
var dataSourceItems: [Items] = []
var counterBuildItems: [Items] {
let weaponItemArray = WeaponItems.weaponItems as [Items]
let defenseItemArray = DefenseItems.defenseItems as [Items]
return weaponItemArray + defenseItemArray
}
var freeBuildItems = WeaponItems.weaponItems as [Items]
var captureKrakenItems: [Items] {
let weaponItemArray = WeaponItems.weaponItems as [Items]
let abilityItemArray = AbilityItems.abilityItems as [Items]
return weaponItemArray + abilityItemArray
}
override func viewDidAppear(_ animated: Bool) {
switch self.presentingViewController!.title! {
case "CounterBuildVC":
dataSourceItems = counterBuildItems
case "FreeBuildVC":
dataSourceItems = freeBuildItems
case "CaptureKrakenVC":
dataSourceItems = captureKrakenItems
default:
break
}
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return dataSourceItems.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! ItemCell
cell.cellImage.image = dataSourceItems[indexPath.row].image
print(dataSourceItems.count)
return cell
}
}
当集合视图控制器出现时,它是空的,是什么导致了这个问题?
7条答案
按热度按时间bqucvtff1#
在TableView或
CollectionView
中,几乎每次我遇到这个问题时,都会有三种情况导致这个问题:1)您的
ViewController
不是UICollectionView
的数据源2)
numberOfRows
或numberOfSections
方法返回03)单元格的高度为0,这可能是由于约束问题,或者是由于
heightForCell
方法未正确实现。很难说哪一个是你的问题,而且你总是有可能遇到一些奇怪的事情。在探索不太可能的选择之前,确保这些都不是你的问题。
i34xakig2#
如果您非常确定collectionView的
dataSource
连接到viewController(默认情况下应该是这样),那么您应该reloadData()
,因为collectionView从dataSourceItems
阅读。要理解这种情况,请在cellForItemAt
中添加一个断点,并在viewDidAppear
中添加另一个断点,然后检查首先调用哪一个断点?希望这对你有帮助。
nkoocmlb3#
如果你使用 * 故事板 *,
1)不要忘记,内容在单元格必须有连接顶部,底部约束和内容视图必须有高度,通过这个单元格将知道设置高度的单元格。如果你没有这些,单元格高度将为0,函数cellForItemAt将永远不会被调用。
2)如果使用此函数,则可以使用单元格布局设置动态单元格和单元格高度:
r7knjye24#
我通过正确初始化UICollectionView修复了我的问题,如下所示:
2vuwiymt5#
检查在集合视图的numberOfItemsInSection方法中是否获得了正确的节数。
如果要将流布局添加到集合视图,请删除流布局,然后检查集合视图单元格是否立即显示。
如果是这样,只需调整您的集合视图流布局代码,它应该看起来像这样
你可以根据你的需要来调整嵌入物。
ewm0tg9j6#
在我的例子中,集合视图contentInset有一个问题,尝试在你的集合视图子类中添加下面的代码。
jhkqcmku7#
你必须在viewWillAppear中添加你的代码,然后它才能正常工作。/*
就像这样: