在滑动之前,UICollectionView单元格不会出现

时间:2016-10-19 17:21:29

标签: ios swift xcode uicollectionview

当我的视图加载时,在向左或向右滑动之前没有任何反应。当我的所有细胞都出现时。我是从名为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:

第一个屏幕截图不会有帮助。它只是一个黑屏。

这是我在黑屏上向右滑动时看到的内容:

enter image description here

0 个答案:

没有答案