UITableView/UICollectionView自动置位
2017-03-05 本文已影响514人
Brice_Zhao
使用 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];
});