TableView ячейка остановить прокрутку на ячейке

Я пытаюсь создать страницу фида, такую ​​как Facebook, я загружаю изображения в ячейки таблицы, используя ленивую загрузку. Иногда происходит блокировка прокрутки на любой случайной ячейке, но когда я пытаюсь прокрутить любую другую видимую ячейку выше или ниже, она прокручивается. Эта проблема очень спорадическая. Я не могу исправить то, что вызывает такое поведение. Пожалуйста помоги.

Вот код;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //label to show values of the menu
    static NSString *CellIdentifier = @"CellIdentifier";

    // Dequeue or create a cell of the appropriate type.
    socialFeedCustomCell *cell = (socialFeedCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[socialFeedCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    for (UIView *tempView in cell.contentView.subviews) {
        [tempView removeFromSuperview];
    }

        [self renderInstagramData:indexPath cell:cell];

    cell.contentView.layer.opaque=YES;
    cell.layer.shouldRasterize = YES;
    cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
    cell.selectionStyle=UITableViewCellSelectionStyleNone;
    cell.backgroundColor=[UIColor clearColor];
    cell.userInteractionEnabled=YES;

    return cell;
}

Спасибо

2 ответа

В tableView:cellForRowAtIndexPath: не удаляйте все представления в cell.contentView.subviews. Предположительно, вы переустанавливаете эти представления где-то еще. Этот метод почти не использует цель повторного использования ячеек таблицы.

Держите подпредставления представления контента на месте; повторно использовать их, назначая им разные данные. Это должно улучшить производительность. Если это не так, отправьте код для renderInstagramData:cell:.

Похоже, что-то блокирует ваш основной поток (поток, отвечающий за обновления пользовательского интерфейса). Переместите все операции, не связанные с обновлениями пользовательского интерфейса, в фоновые очереди, используя GCD. Например:

dispatch_queue_t jsonParsingQueue = dispatch_queue_create("jsonParsingQueue", NULL);

    // execute a task on that queue asynchronously
    dispatch_async(jsonParsingQueue, ^{
     // Parse your data here

        dispatch_async(dispatch_get_main_queue(), ^{
           // Update your UI in the main thread
           [self.tableView reloadData];
        });
    });
Другие вопросы по тегам