概述
一般頁面分類的展示都是類似新聞類app左右切換的效果将塑,頂部一個分類控制器褥赊,內(nèi)容列表支持左右切換跛蛋。但是有的時候分類很多熬的,但是內(nèi)容相對較少的時候,就可以使用垂直滾動的方式來切換分類赊级。
實現(xiàn)思路
下面以UICollectionView
為例押框,但我們采用UICollectionViewFlowLayout
自定義布局的時候,可以記錄所有cell的UICollectionViewLayoutAttributes
,這樣就能知道每個section的位置理逊。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (!(scrollView.isTracking || scrollView.isDecelerating)) {
//不是用戶滾動的橡伞,比如setContentOffset等方法盒揉,引起的滾動不需要處理。
return;
}
//直接使用不是很準確兑徘,需要排序
NSArray* visibleCellIndex = self.aCollectionView.indexPathsForVisibleItems;
NSArray *sortedIndexPaths = [[self.aCollectionView indexPathsForVisibleItems] sortedArrayUsingSelector:@selector(compare:)];
NSIndexPath* indexPath = [sortedIndexPaths firstObject];
// NSArray *indexPaths = [self.aCollectionView indexPathsForVisibleItems];
// NSIndexPath *indexPath = indexPaths.firstObject;
NSUInteger topSection = indexPath.section;
if (indexPath != nil && topSection >= 0) {
[self.pageTitleView setPageTitleViewWithProgress:1 originalIndex:self.pageTitleView.selectedIndex targetIndex:topSection];
}
}
在collectionView的可視范圍內(nèi)找到第幾個section刚盈,然后設置pagetitle的位置
//這里關心點擊選中的回調(diào)!9夷浴藕漱!
UICollectionViewLayoutAttributes *targetAttri = self.flowLayout.headerAttributes[selectedIndex];
if (selectedIndex == 0) {
//選中了第一個,特殊處理一下最域,滾動到sectionHeaer的最上面
[self.aCollectionView setContentOffset:CGPointMake(0, 0) animated:YES];
}else {
//不是第一個谴分,需要滾動到categoryView下面
[self.aCollectionView setContentOffset:CGPointMake(0, targetAttri.frame.origin.y) animated:YES];
}
通過自定義的flowout
數(shù)組找到锈麸,section的位置布局
下面提供Demo地址