当我的视图加载时,在向左或向右滑动之前没有任何反应。当我的所有细胞都出现时。我是从名为InfiniteCollectionView的自定义类继承的。
以下是我的收藏视图的代码:
@IBOutlet weak var infiniteCollectionView: InfiniteCollectionView! {
didSet {
infiniteCollectionView.registerNib(UINib(nibName: "AchievementDetailCell", bundle: nil), forCellWithReuseIdentifier: "cell")
infiniteCollectionView.infiniteDataSource = self
infiniteCollectionView.infiniteDelegate = self
infiniteCollectionView.opaque = false
infiniteCollectionView.backgroundColor = UIColor.clearColor()
infiniteCollectionView.reloadData()
}
}
下面是一些代码,以便我可以在另一个视图的顶部重叠我的集合视图。
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.clearColor()
view.opaque = false
// Do any additional setup after loading the view.
}
extension AchievementsDetailCollectionViewController : InfiniteCollectionViewDataSource {
func numberOfItems(collectionView: UICollectionView) -> Int
{
return dataArray.count
}
func cellForItemAtIndexPath(collectionView: UICollectionView, dequeueIndexPath: NSIndexPath, usableIndexPath: NSIndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: dequeueIndexPath) as! AchievementDetailCell
cell.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.95)
cell.layer.cornerRadius = 10
cell.layer.masksToBounds = true
return cell
}
}
无论我做什么,它都似乎不会出现,直到我向左或向右滑动。我尝试在viewDidLoad中重新加载数据,当我在cellForRowAtIndexPath中尝试reloadData()时,我在方法中遇到崩溃:super.layoutSubviews()
此时我认为它可能与我的约束有关。这是真的,还是我的代码有问题?
编辑:我还应该提一下我的集合视图的数据正在主线程上重新加载。
编辑#2:自定义类的数据源方法:
extension InfiniteCollectionView: UICollectionViewDataSource
{
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
let numberOfItems = infiniteDataSource?.numberOfItems(self) ?? 0
return 3 * numberOfItems
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
{
return infiniteDataSource!.cellForItemAtIndexPath(self, dequeueIndexPath: indexPath, usableIndexPath: NSIndexPath(forRow: getCorrectedIndex(indexPath.row - indexOffset), inSection: 0))
}
private func getCorrectedIndex(indexToCorrect: Int) -> Int
{
if let numberOfCells = infiniteDataSource?.numberOfItems(self)
{
if (indexToCorrect < numberOfCells && indexToCorrect >= 0)
{
return indexToCorrect
}
else
{
let countInIndex = Float(indexToCorrect) / Float(numberOfCells)
let flooredValue = Int(floor(countInIndex))
let offset = numberOfCells * flooredValue
return indexToCorrect - offset
}
}
else
{
return 0
}
}
}
编辑#3:
第一个屏幕截图不会有帮助。它只是一个黑屏。
这是我在黑屏上向右滑动时看到的内容: