根据 UICollectionView Cell 更改 UINavigationbar 标题

Change UINavigationbar title according to UICollectionView Cell

我正在尝试根据 UICollectionView 单元格 indexPath.row 更改 UINavigationbar 标题的标题,我有像照片 sliding-content 这样的水平 UICollectionView 单元格(如IOS 中的照片应用程序)。

我想要实现的是,当我从 indexPath.row 移动时,例如从 1 移动到 2 以更改标题,但我有一个问题,我将以下代码放在 cellforitematindexpathwilldisplaycell :

self.title = "\(indexPath.row+1) of 2"

此代码工作正常,但有一个问题,即当我开始拖动到下一个单元格时,但我 return 到我在哪里,标题已更改为 2,但我仍在 1 中!这真的很烦人!

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

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

发生这种情况是因为调用了方法 cellForItemAtIndexPath 来准备第二个项目,但第一个单元格仍在内存中,并且当您 return 第一个单元格时未调用方法 cellForItemAtIndexPath。 试试这个:

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

不要忘记在您的 CollectionViewController.h

中添加 UIScrollViewDelegate