根据 UICollectionView Cell 更改 UINavigationbar 标题
Change UINavigationbar title according to UICollectionView Cell
我正在尝试根据 UICollectionView
单元格 indexPath.row
更改 UINavigationbar
标题的标题,我有像照片 sliding-content 这样的水平 UICollectionView
单元格(如IOS 中的照片应用程序)。
我想要实现的是,当我从 indexPath.row 移动时,例如从 1 移动到 2 以更改标题,但我有一个问题,我将以下代码放在 cellforitematindexpath
或 willdisplaycell
:
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
我正在尝试根据 UICollectionView
单元格 indexPath.row
更改 UINavigationbar
标题的标题,我有像照片 sliding-content 这样的水平 UICollectionView
单元格(如IOS 中的照片应用程序)。
我想要实现的是,当我从 indexPath.row 移动时,例如从 1 移动到 2 以更改标题,但我有一个问题,我将以下代码放在 cellforitematindexpath
或 willdisplaycell
:
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