Reloading a UICollectionView using reloadData method returns immediately before reloading data

前端 未结 3 1186
北海茫月
北海茫月 2020-12-07 19:34

I need to know when reloading a UICollectionView has completed in order to configure cells afterwards (because I am not the data source for the cells - other wise would have

相关标签:
3条回答
  • 2020-12-07 19:49

    If you'd like to perform some code after your collectionView has completed it's reloadData() method, then try this (Swift):

        self.collectionView.reloadData()
        self.collectionView.layoutIfNeeded()
        dispatch_async(dispatch_get_main_queue()) { () -> Void in
            // Put the code you want to execute when reloadData is complete in here
        }
    

    The reason this works is because the code within the dispatch block gets put to the back of line (also known as a queue). This means that it is waiting in line for all the main thread operations to finish, including reloadData()'s methods, before it becomes it's turn on the main thread.

    0 讨论(0)
  • 2020-12-07 20:02

    This is caused by cells being added during layoutSubviews not at reloadData. Since layoutSubviews is performed during next run loop pass after reloadData your cells are empty. Try doing this:

    [self.collectionView reloadData];
    [self.collectionView layoutIfNeeded];
    [self configure cells]; 
    

    I had similar issue and resolved it this way.

    0 讨论(0)
  • 2020-12-07 20:04

    Collection view is not supported to be reloaded animatedly with help of reloadData. All animations must be performed with methods, such as

    [collectionView deleteItemsAtIndexPaths:indexesToDelete];
    [collectionView insertSections:sectionsToInsert];
    [collectionView reloadItemsAtIndexPaths:fooPaths];
    

    inside of performBatchUpdates: block. That reloadData method can only be used for rough refresh, when all items are removed and laid out again without animation.

    0 讨论(0)
提交回复
热议问题