UITableView/UICollectionView自动置位到顶部

使用 UICollectionView 分组显示图片或文字,每个组都会有一个头视图/尾视图。有这么一个需求:要求UICollectionView 在开始出现的时候,就滑动到某个组的 header 或 footer。

实际上,在 UICollectionView.h 中搜索,你会发现有一个 - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; 可惜这个方法是给 Item准备的,并不适用于 headerView / footerView 经过查找后,也没有发现诸如:- (void)scrollToSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 的方法

解决办法

修改 UICollectionView 的 ContentOffset

dispatch_async(dispatch_get_main_queue(), ^{
        CGFloat offsetY = [self.collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]].frame.origin.y;
        
        CGFloat contentInsetY = self.collectionView.contentInset.top;
        CGFloat sectionInsetY = ((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).sectionInset.top;
        
        [self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x, offsetY - contentInsetY - sectionInsetY) animated:NO];
    });

你可能感兴趣的:(UITableView/UICollectionView自动置位到顶部)