gpt4 book ai didi

iphone - 以编程方式滚动到 UICollectionView 中的补充 View

转载 作者:IT王子 更新时间:2023-10-29 08:02:41 26 4
gpt4 key购买 nike

我正在使用 UICollectionView 来分段显示照片。每个部分都有一个补充 View 作为标题,并通过方法提供:viewForSupplementaryElementOfKind

我的侧面有一个洗涤器,允许用户从一个部分跳到另一个部分。现在,我正在使用 scrollToItemAtIndexPath:atScrollPosition:animated: 滚动到该部分的第一项,但我真正想要的是滚动 collectionView,以便该部分的标题位于屏幕顶部,不是第一个单元格。我没有看到一个明显的方法来做到这一点。你们有解决办法吗?

我想我可以滚动到该部分的第一个项目,然后将其偏移补充高度加上项目和标题之间的偏移量(如果它归结为那个)(有一种滚动到点坐标的方法内容 View )。但是,如果有更简单的方法,我想知道。

谢谢。

最佳答案

不能为此使用scrollToItemAtIndexPath:atScrollPosition:animated

希望他们将来会添加像 scrollToSupplementaryElementOfKind:atIndexPath: 这样的新方法,但目前,唯一的方法是直接操作 contentOffset。。 p>

下面的代码展示了如何使用 FlowLayout 将标题滚动到垂直顶部。您可以对水平滚动执行相同的操作,或将此想法用于其他布局类型。

NSIndexPath *indexPath = ... // indexPath of your header, item must be 0

CGFloat offsetY = [collectionView layoutAttributesForSupplementaryElementOfKind:UICollectionElementKindSectionHeader atIndexPath:indexPath].frame.origin.y;

CGFloat contentInsetY = self.contentInset.top;
CGFloat sectionInsetY = ((UICollectionViewFlowLayout *)collectionView.collectionViewLayout).sectionInset.top;

[collectionView setContentOffset:CGPointMake(collectionView.contentOffset.x, offsetY - contentInsetY - sectionInsetY) animated:YES];

请注意,如果您有非零的 contentInset(如在 iOS 7 中,当 ScrollView 在栏下方扩展时),您需要从 offsetY 中减去它,如图所示. sectionInset 也是如此。

更新:

代码假定布局处于准备好的“有效”状态,因为它使用它来计算偏移量。当 Collection View 显示其内容时,布局已准备就绪。

在上面的代码之前调用 [_collectionView.collectionViewLayout prepareLayout] 可能会在您需要滚动尚未呈现的 Collection View 时有所帮助(来自 viewDidLoad 说) .对 layoutIfNeeded 的调用(正如@Vrasidas 在评论中建议的那样)也应该有效,因为它还准备了布局。

关于iphone - 以编程方式滚动到 UICollectionView 中的补充 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com