使用UICollectionView scrollToItemAtIndexPath返回上次选定的单元格

我有UICollectionView供用户从网格中选择图像。 一旦选择了一个单元格,视图控制器就会被释放,包括UICollectionView。

我想记住用户上次使用UICollectionView时的位置,并在再次加载视图控制器时自动滚动到该位置。

我遇到的问题是何时可以完成。 我假设我需要等到UICollectionView完全加载后再执行scrollToItemAtIndexPath:atScrollPosition:animated:

什么是确定何时视图控制器和UICollectionView完全布局的首选方法?


我花了一些时间探索解决方案。 @Leo,我无法在viewDidLoad滚动。 但是,我能够获得良好的结果,以跟踪视图生命周期的状态。

我创建了一个常量来记住内容偏移量。 我使用了一个常量,因此它会保留它在VC的负载之间的值。 我还创建了一个属性来标记何时可以滚动:

static CGPoint kLastContentOffset;
@property (nonatomic) BOOL autoScroll;
@property (weak, nonatomic) IBOutlet UICollectionView *collection;

我使用的生命周期代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.autoScroll = NO; // before CollectionView laid out
}

- (void)viewDidDisappear:(BOOL)animated
{
    kLastContentOffset = self.collection.contentOffset;
    [super viewDidDisappear:animated];
}

- (void)viewDidLayoutSubviews
{
    if (self.autoScroll) { // after CollectionView laid out
        self.autoScroll = NO; // don't autoScroll this instantiation of the VC again
    if (kLastContentOffset.y) {
        [self.collection setContentOffset:kLastContentOffset];
    }
}

在collectionView的布局过程中,我设置了一个标志,指示下一个viewDidLayoutSubviews应该自动滚动:

- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView
{
    self.autoScroll = YES;
    // return count here
}

当我的视图消失时,重要的部分是保存内容偏移量。 在我想要的应用程序启动之间以及没有将其保存在偏好中的原因之间不会记住这个常量。

似乎必须有一个更优雅的解决方案,但这很有效。

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

上一篇: Using UICollectionView scrollToItemAtIndexPath to return to last selected cell

下一篇: UICollectionView + SDWebImage + Cell reuse