UICollectionView 滚动到header顶部

如果 collectionView 有SectionHeader 的时候,调用 scrollToItem 会滚动到第一项,header 无法显示。

collectionView.scrollToItem(at: IndexPath(row: 0, section: 0), at: UICollectionViewScrollPosition(), animated: true)

调用此方法可滚动到组头

// layout 的 header 悬浮属性
layout.sectionHeadersPinToVisibleBounds = false

//  滚动到指定的位置
let selectedIndexPath = IndexPath(item:0 , section: indexPath.row)
if let layoutAttributes = collectionView.layoutAttributesForSupplementaryElement(ofKind: UICollectionElementKindSectionHeader, at: selectedIndexPath) {
    let headerOffset = CGPoint(x:0, y:layoutAttributes.frame.origin.y - collectionView.contentInset.top)
            collectionView.setContentOffset(headerOffset, animated: true)
}

如果悬浮属性为true
// layout 的 header 悬浮属性
layout.sectionHeadersPinToVisibleBounds = true

下面的方法可以滑动到指定的头部

oc版本:

UICollectionViewLayoutAttributes*attributes = [self.collectionView layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:index]];

CGRectrect = attributes.frame;

[self.collectionView setContentOffset:CGPointMake(self.collectionView.frame.origin.x, rect.origin.y - “headerView的高度”) animated:YES];

swift版:

 let  path =IndexPath.init(row:0, section:5)

 let  attributes =self.collectionView.layoutAttributesForItem(at: path)

 self.collectionView.setContentOffset(CGPoint.init(x: self.collectionView.frame.origin.x, y: (attributes?.frame.origin.y)!-“headerView的高度”), animated: true)

你可能感兴趣的:(UICollectionView 滚动到header顶部)