UICollectionView случайно не отображает ячейку

У меня есть UICollectionView, который прокручивается вертикально. Первая ячейка содержит другой UICollectionView, который прокручивается по горизонтали.

В случайных случаях горизонтальный UICollectionView загружает ячейку и не отображает ее. Итак, я вижу пару ячеек, пустое пространство и еще несколько ячеек. Мне трудно определить причину этого.

Код выглядит так:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (collectionView.tag == 1) {

    if (indexPath.section == 1) {

// do some stuff

} else if (collectionView.tag == 999) { // horizontal collection view

    HorizontalCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell999" forIndexPath:indexPath];

    [self addBorderToCellImageView:cell.imageView];

    [self updateHorizontalCell:cell forIndexPath:indexPath];

    return cell;
}

return [[UICollectionViewCell alloc] init]; // in any case, return a cell.
}

вторая часть такова:

 // updating cells for collectionView.tag = 999;
- (void)updateHorizontalCell:(HorizontalCell *)cell forIndexPath:(NSIndexPath *)indexPath
{

id obj = self.horizontalProductDataSource[indexPath.row]; // use introspection, and act accordingly.
NSLog(@"section %ld, row %ld", (long)indexPath.section, (long)indexPath.row);

if ([obj isKindOfClass:[Product class]]) {

    Product *wishListProduct = (Product *)obj;

    cell.subtitle.hidden = YES;
    cell.title.text = wishListProduct.name;
    NSLog(@"from product: %@", wishListProduct.name);
    NSLog(@"from cell: %@", cell.title.text);
    cell.price.text = [NSString stringWithFormat:@"%.f %@", wishListProduct.totalPrice, NSLocalizedString(@"Shekel", nil)];

    __weak HorizontalCell *weakCell = cell;

    NSString *imageURL;

    Image *image = [wishListProduct.pictuers lastObject];
    imageURL = image.url;

    [cell.imageView setImageWithURLRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:imageURL]]
                          placeholderImage:[UIImage imageNamed:@"Icon.png"] 
                                   success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
                                       weakCell.imageView.image = image;
                                   }
                                   failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
                                       logIt(@"error while bringing photos into cells: %@", error);
                                   }];
}

любая помощь будет потрясающей!


comment
Вы попробуете смешать tableview и collectionview для горизонтальной и вертикальной прокрутки?   -  person Devangi Desai    schedule 17.12.2013
comment
что ты имеешь в виду? @ДевангиДесаи ?   -  person Raz    schedule 17.12.2013
comment
raywenderlich.com/4680/ — вы можете попробовать этот пример   -  person Devangi Desai    schedule 17.12.2013
comment
Я уже работал над этим. И в моем приложении он работает отлично. У меня есть одно представление таблицы + представление коллекции. Он прокручивается по вертикали, и каждая ячейка также прокручивается по горизонтали.   -  person Devangi Desai    schedule 17.12.2013
comment
спасибо @DevangiDesai, но это не моя проблема/вопрос. дело не в том, что я ничего не могу отобразить или у меня проблемы с макетом. все работает хорошо. проблема в том, что иногда я пропускаю ячейку... и это существующий проект, поэтому эти изменения не могут иметь места   -  person Raz    schedule 17.12.2013
comment
Уфф, ладно. Позвольте мне посмотреть, могу ли я помочь   -  person Devangi Desai    schedule 17.12.2013
comment
Когда это произойдет, у вас есть указатель на ячейку? Можете ли вы взломать код и увидеть фактический кадр ячейки?   -  person ABeanSits    schedule 05.02.2014
comment
да, я вижу рамку, единственное, что пользовательский интерфейс ее не отображает. когда я прокручиваю недостающую область, а область скрыта, другая прокрутка отобразит ее.   -  person Raz    schedule 06.02.2014


Ответы (1)


Это похоже на состояние гонки, когда UICollectionView пытается заполнить ячейку, когда источник данных все еще не имеет доступных данных. Позже, когда вы прокручиваете страницу вниз и назад, ячейка заполняется уже существующими данными.

person Simon    schedule 19.02.2014