2016-04-27 3 views
0

Я хочу создать бесконечное представление коллекции прокрутки, поэтому в этом коде я добавляю 10 к количеству ячеек каждый раз, когда путь индекса равен последнему элементу ячейки, а затем перезагружает данные в сборнике. Функция работает; Я могу прокручивать бесконечно, но если я остановлюсь, а затем немного прокручу вверх или вниз, все будет пусто. Ячейки не отображаются.UICollectionViewCells не отображается после reloadData()

Моя теория заключается в том, что она имеет какое-то отношение к dequeueReusableCellWithReuseIdentifier, и она решает показать только те ячейки, которые в настоящее время находятся на экране.

View when scrolling (Я добавил число к клеткам за пределами Xcode)

View with the missing cells above when scrolling a bit after stopping

private let reuseIdentifier = "Cell" 
private var numberOfCells = 20 

class CollectionViewController: UICollectionViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) 

     if indexPath.row == numberOfCells - 1 { 
      numberOfCells += 10 
      self.collectionView?.reloadData() 
     } 

     cell.contentView.backgroundColor = UIColor.blueColor() 
     return cell 
    } 

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
     return 1 
    } 

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

ответ

1

Вызов reloadData из cellForItemAtIndexPath плохо. Для этого используйте другой метод делегирования, например, scrollViewDidScroll.

+0

Это сработало. Благодаря! – noanoanoa

0

Я занимаюсь схожими вещами в Table View и работает для меня. Единственное различие заключается в том, что если indexPath.row является последней ячейкой, то я вызываю другую функцию, которая делает некоторые вещи (необходимые для меня) и вызывает только reloadData(). Попробуйте этот путь, я не уверен, но он может решить вашу проблему.

0
var numberOfCells: Int = 20 {  
    didSet { 
     if numberOfCells != oldValue { 
      self.collectionView?.reloadData() 
     } 
    } 
}