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];
});
});