0

У меня есть горизонтальный UICollectionView, который реализует UICollectionViewLayout и использует targetContentOffsetForProposedContentOffset для пользовательской функции пэнга/пейджинга. Каждая ячейка имеет почти ширину экрана, а следующая ячейка слегка отображается вправо. Функциональность отлично работает, но я хочу иметь возможность удалять ячейку с индексом 0, когда текущая ячейка является индексом 1. В настоящее время я могу рассчитать и сделать это просто отлично, но при удалении ячейки индекса 0 она скользит до следующая ячейка (старый индекс 2, новый 1 (после удаления 0)) из-за текущего смещения содержимого. Я не уверен, как удалить индекс 0 при сохранении текущего макета.UICollectionview custom flow layout delete cell

Сейчас в моем делегатом я делаю:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ 

float cellWidth = self.collectionView.bounds.size.width - 20; 

float currentPage = self.collectionView.contentOffset.x/cellWidth; 


if (currentPage == 1) { 
    [self remove:0]; 
} 


} 


-(void)remove:(int)i { 

    [self.collectionView performBatchUpdates:^{ 
     [self.data removeObjectAtIndex:0]; 

     NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0]; 
     [self.collectionView deleteItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]]; 



    } completion:^(BOOL finished) { 


    }]; 
} 

Таким образом, расчет и удаление работает нормально, но при УДАЛЕНИЕ [0], вид коллекции прокручивается к следующему cell..and I» Не знаю, как это остановить.

Я пробовал self.collectionview.contentOffset = CGMakePoint(0,0) после удаления, но переход по-прежнему заметно неисправен. Любые идеи о том, как подойти к этой проблеме?

ответ

0

поэтому после тонны проб и ошибок я смог решить проблему. Это может быть немного хакерским, но я просто завернул пакет анимацией uiview, у которой нет длительности. В основном это отменяет анимацию удаления

[UIView animateWithDuration:0 animations:^{ 
    [self.collectionView performBatchUpdates:^{ 
     [scrollView setContentOffset:CGPointMake(0, 0) animated:NO]; 
     [self.data removeObjectAtIndex:0]; 
     NSIndexPath *indexPath =[NSIndexPath indexPathForRow:0 inSection:0]; 
     [self.collectionView deleteItemsAtIndexPaths:@[indexPath]]; 
     [self.collectionView.collectionViewLayout invalidateLayout]; 
    } completion:nil]; 
}];