2013-09-27 3 views
6

Я разрабатываю приложение, где у меня есть бесконечно прокручиваемый UICollectionView изображений. Когда пользователь достигает нижней части страницы, я запрашиваю следующую страницу изображений, получаю новые indexPaths и добавляю их в UICollectionView с помощью [collectionView insertItemsAtIndexPaths:newIndexPaths].iOS 7: insertItemsAtIndexPaths: прокручивает UICollectionView

Все это отлично работает в iOS 6. В iOS 7 работает, но каждый раз прокручивает пользователя до вершины коллекции. Вместо этого я попытался использовать reloadData, и то же самое происходит.

Любая идея, как я могу предотвратить эту прокрутку?

UPDATE: В том числе мой код

У меня есть UICollectionView, который отображает эскизы изображений в виде мозаики (каждое изображение другого размера, поэтому я использую RFQuiltLayout для этого я не думаю. это имеет какое-либо отношение к проблеме прокрутки, поскольку исходный код, по-видимому, не включает прокрутку.

Загрузите каждый комплект из 12 изображений из нашего внутреннего блока с помощью следующего кода. (Если isRefresh истинно, я очищаю из массива изображений и снова загрузите первую страницу):

- (void)loadImagesStartingAtNum:(int)num withRefresh:(BOOL)isRefresh { 
    NSLog(@"Starting query..."); 

    [PFCloud callFunctionInBackground:@"homeFeed" withParameters:@{@"startNum": [NSNumber numberWithInt:num]} block:^(id objects, NSError *error) { 

     if(!error) { 

      //NSLog(@"Got back home feed objects: %@", objects); 

      NSMutableArray *newIndexPaths = [[NSMutableArray alloc] init]; 

      if (isRefresh) { 
       [imagesArray removeAllObjects]; 
       [imageURLsArray removeAllObjects]; 

       page = 0; 

       for (PFObject *object in objects) { 
        [imagesArray addObject:object]; 
        [imageURLsArray addObject:[XSUtilities urlForImageObject:object]]; 

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([imagesArray count] - 1) inSection:0]; 
        NSLog(@"New row: %d", indexPath.row); 
        [newIndexPaths addObject:indexPath]; 
       } 

       if ([newIndexPaths count] > 0) { 
        [feed reloadData]; 
        [refreshControl endRefreshing]; 

        page += 1; 
       } 
      } else { 
       for (PFObject *object in objects) { 
        [imagesArray addObject:object]; 
        [imageURLsArray addObject:[XSUtilities urlForImageObject:object]]; 

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([imagesArray count] - 1) inSection:0]; 
        NSLog(@"New row: %d", indexPath.row); 
        [newIndexPaths addObject:indexPath]; 
       } 

       if ([newIndexPaths count] > 0) { 
        [UIView animateWithDuration:0.25 animations:^{loadingLabel.alpha = 0.0;}]; 
        [feed insertItemsAtIndexPaths:newIndexPaths]; 
        //[feed scrollToItemAtIndexPath:newIndexPaths[0] atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO]; 

        NSLog(@"imagesArray count: %d", [imagesArray count]); 

        //[feed reloadData]; 

        page += 1; 
       } else { 
        NSLog(@"Got back no objects"); 
       } 
      } 

     } 
     isLoadingNextPage = NO; 
    }]; 
} 

Я тогда определить, когда пользователь прокручивает в нижней части страницы и загрузите следующий набор с этим кодом:

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { 

    CGPoint offset = aScrollView.contentOffset; 
    CGRect bounds = aScrollView.bounds; 
    CGSize size = aScrollView.contentSize; 
    UIEdgeInsets inset = aScrollView.contentInset; 

    float y = offset.y + bounds.size.height - inset.bottom; 
    float h = size.height; 

    float reload_distance = 480; 
    if(y > h - reload_distance) { 
     NSLog(@"Hit the load point"); 

     if (!isLoadingNextPage) { 
      NSLog(@"Loading page %d", page); 
      isLoadingNextPage = YES; 
      [self loadImagesStartingAtNum:(page * 12) withRefresh:NO]; 
     } 

    } 

} 
+0

Я не могу воспроизвести это. Вы можете увидеть бесконечное представление коллекции прокрутки I [посмеянное здесь] (https://dl.dropboxusercontent.com/u/2183704/Infinite%20Scroll%20Collection%20View.zip). Каждый раз, когда вы попадаете в нижнюю часть, он добавляет еще 200 ячеек. Итак, вы можете показать свой код? –

ответ

1

Затрудняюсь ответить, не видя кода.

Вы можете использовать метод scrollToItemAtIndexPath?

- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:NO 

Вы можете прокрутить до любой позиции, которую хотите.

+2

Вы хотите использовать этот метод для установки позиции прокрутки по определенному элементу после вставки новых элементов? Я попробовал это, и это не решило проблему ... сначала она установила новую позицию прокрутки, а затем все это снова прокручивалось вверх. – Andrew

Смежные вопросы