UICollectionView - 滚动到第一个单元格
UICollectionView - Scrolling to first cell
我正在使用 UICollectionView,我需要在单击按钮后滚动到第一个单元格。
该按钮位于我的 collection 视图中的(大)header 部分...单击它时,我需要滚动到位于该按钮下方的第一个单元格。
我创建了这个按钮的动作,但我不知道如何滚动到第一个 UICollectionViewCell。
有人可以帮助我吗?
默认 CollectionView Delgeate...
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated;
使用此委托方法,将 indexPath 设置在第一个位置:
Swift
self.collectionView?.scrollToItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0),
atScrollPosition: .Top,
animated: true)
Swift 3
self.collectionView?.scrollToItem(at: IndexPath(row: 0, section: 0),
at: .top,
animated: true)
Objective-C
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]
atScrollPosition:UICollectionViewScrollPositionTop
animated:YES];
如果您想滚动并停在不同的位置,请更改 UICollectionViewScrollPositionTop
有可能使用UIScrollView相关属性
collectionView.contentOffset.x = 0
您可以将其用于 Objective - C
[self.restaurantCollectionView setContentOffset:CGPointZero animated:YES];
if let indexPath = self.collectionView?.indexPathForItem(at: CGPoint(x: 0, y: 0)) {
self.collectionView?.scrollToItem(at: indexPath, at: .top, animated: false)
}
以下解决方案对我来说效果很好:
UIView.animate(withDuration: 0.5, animations: {
self.collectionView?.contentOffset.x = 0
})
它滚动到第一个项目,也可以看到 contentInset。
scrollView.setContentOffset(CGPoint(x: 0.0, y: 0.0), animated: true)
我发现我可以在所有设备上可靠地工作并正确处理 iPhone X 风格的安全区域。
let top = CGPoint(x: collectionView.contentOffset.x,
y: collectionView.adjustedContentInset.top)
collectionView.setContentOffset(top, animated: false)
(垂直滚动到顶部,但如果需要,您可以轻松地将其滚动到左上角。)
我正在使用 UICollectionView,我需要在单击按钮后滚动到第一个单元格。
该按钮位于我的 collection 视图中的(大)header 部分...单击它时,我需要滚动到位于该按钮下方的第一个单元格。
我创建了这个按钮的动作,但我不知道如何滚动到第一个 UICollectionViewCell。
有人可以帮助我吗?
默认 CollectionView Delgeate...
- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated;
使用此委托方法,将 indexPath 设置在第一个位置:
Swift
self.collectionView?.scrollToItemAtIndexPath(NSIndexPath(forItem: 0, inSection: 0),
atScrollPosition: .Top,
animated: true)
Swift 3
self.collectionView?.scrollToItem(at: IndexPath(row: 0, section: 0),
at: .top,
animated: true)
Objective-C
[self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]
atScrollPosition:UICollectionViewScrollPositionTop
animated:YES];
如果您想滚动并停在不同的位置,请更改 UICollectionViewScrollPositionTop
有可能使用UIScrollView相关属性
collectionView.contentOffset.x = 0
您可以将其用于 Objective - C
[self.restaurantCollectionView setContentOffset:CGPointZero animated:YES];
if let indexPath = self.collectionView?.indexPathForItem(at: CGPoint(x: 0, y: 0)) {
self.collectionView?.scrollToItem(at: indexPath, at: .top, animated: false)
}
以下解决方案对我来说效果很好:
UIView.animate(withDuration: 0.5, animations: {
self.collectionView?.contentOffset.x = 0
})
它滚动到第一个项目,也可以看到 contentInset。
scrollView.setContentOffset(CGPoint(x: 0.0, y: 0.0), animated: true)
我发现我可以在所有设备上可靠地工作并正确处理 iPhone X 风格的安全区域。
let top = CGPoint(x: collectionView.contentOffset.x,
y: collectionView.adjustedContentInset.top)
collectionView.setContentOffset(top, animated: false)
(垂直滚动到顶部,但如果需要,您可以轻松地将其滚动到左上角。)