Ios 根据UICollectionView单元格更改UINavigationbar标题

Ios 根据UICollectionView单元格更改UINavigationbar标题,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我试图根据UICollectionView单元格indexPath.row更改UINavigationbar标题,我有水平UICollectionView单元格,如照片滑动内容(如IOS中的照片应用程序) 我试图实现的是,当我从indexPath.row(例如从1移动到2)更改标题时,但我遇到了一个问题,我将以下代码放置在cellforitematindexpath或willdisplaycell中: self.title = "\(indexPath.row+1) of 2" 这段代码工作正

我试图根据
UICollectionView
单元格
indexPath.row
更改
UINavigationbar
标题,我有水平
UICollectionView
单元格,如照片滑动内容(如IOS中的照片应用程序)

我试图实现的是,当我从indexPath.row(例如从1移动到2)更改标题时,但我遇到了一个问题,我将以下代码放置在
cellforitematindexpath
willdisplaycell
中:

self.title = "\(indexPath.row+1) of 2"
这段代码工作正常,但它有一个问题,那就是当我开始拖动到下一个单元格,但我返回到我在哪里,标题更改为2,但我仍然在1中!真烦人

我也尝试过将代码放在
ScrollViewDiEndDecelling
中,但它也有同样的问题,比如我开始拖动,但我改变主意留在单元格1,所以方法说OK结束拖动,然后标题再次更改为2,但我仍然在1中


我需要这样做,因为如果我仍然在我所在的位置,那么我就不必更改标题,如果我完全在下一个单元格中,那么就更改标题。

这是因为调用了方法
cellForItemAtIndexPath
来准备第二项,但第一个单元格仍在内存中,当您返回到第一个单元格时,没有调用方法
cellForItemAtIndexPath
。 试试这个:

-(void)scrollViewDidEndDecelerating:(nonnull UIScrollView *)scrollView {
        float currentPage = self.collectionView.contentOffset.x / self.collectionView.frame.size.width;
        NSLog(@"Current page: %f", ceil(currentPage));
}

不要忘了在CollectionViewController中添加
UIScrollViewDelegate
。h

最好将代码放在
ScrollViewDiEndDecelling
中,它可以工作!