如何判斷UICollectionView 或 UItableView reload()函數結束?
正常開發中,當數據發生變化,只要調用下reload()函數,就可以刷新數據。但 是,如果需要在加載結束後,緊接着進行一些業務處理,比如滑動到指定位置。
在我碰到的業務中,需要等待UICollectionView加載完畢後,滑動到底部。一般會使用setContentOffset()進行滑動,但是這時候獲取的contentSize是不準確的。因爲這時候的cell還沒有填充到UICollectionView中,所以contentOffset中可滑動的距離基本等於0。
self.collectionView.reload()
self.collectionView.setContentOffset()
經過一番搜索,發現可以使用CATransaction事務來幫助我們解決這個問題。
CATransaction.begin()
CATransaction.setCompletionBlock {
// collectionView reload結束後 滑動到最右邊。
self.collectionView.setContentOffset()
}
self.collectionView.reloadData()
CATransaction.commit()
CATransaction可以幫助我們控制動畫的過程,可以設置執行時間,而其中的CompletionBlock是執行結束的回調,我們可以把reload當做一個事務進行提交,當其加載結束,自然會觸發我們後續的任務。