UICollectionView自动滚动到IndexPath的单元格

在加载集合视图之前,用户设置集合视图数组中图像的数量。 所有的单元格都不适合在屏幕上。 我有30个单元,屏幕上只有6个。

问题:如何在UICollectionView的加载时自动滚动到具有所需图像的单元格?


新增,编辑答案:

将其添加到viewDidLayoutSubviews

-(void)viewDidLayoutSubviews {
   [super viewDidLayoutSubviews];
   [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
}

旧的答案适用于较旧的iOS

添加这个viewWillAppear

[self.view layoutIfNeeded];
[self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];

我发现在viewWillAppear中的滚动可能无法可靠地工作,因为集合视图还没有完成它的布局; 您可能会滚动到错误的项目。

我还发现,viewDidAppear中的滚动会导致未滚动视图的瞬间闪烁可见。

而且,如果每次通过viewDidLayoutSubviews滚动,则用户将无法手动滚动,因为每次滚动时,某些集合布局会导致子视图布局。

以下是我发现的可靠工作:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    // If we haven't done the initial scroll, do it once.
    if (!self.initialScrollDone) {
        self.initialScrollDone = YES;

        [self.collectionView scrollToItemAtIndexPath:self.myInitialIndexPath
                                    atScrollPosition:UICollectionViewScrollPositionRight animated:NO];
    }
}

我完全同意上面的答案。 唯一的解决方法是在viewDidAppear中设置代码

viewDidAppear 
{
    [self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];
}

当我使用viewWillAppear时,滚动不起作用。

链接地址: http://www.djcxy.com/p/91635.html

上一篇: UICollectionView auto scroll to cell at IndexPath

下一篇: iOS UICollectionView prototype cell size property ignored