2013-03-24 21 views
5

Mam UICollectionView zawarte w , który używa poziomy UICollectionViewFlowLayout. Używam również komórki prototypowej utworzonej w moim UIStoryboard. Chcę utworzyć niestandardowe stronicowanie, więc używam - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset.Dlaczego indexPathForItemAtPoint zawsze zwraca zero

Problem polega na tym, że za każdym razem, gdy próbuję uzyskać wartość indexPath odpowiadającą parametrowi docelowyContentOffset (punkt w widoku przewijania, w którym zatrzymany jest scroll), widok kolekcji zwraca zero, mimo że punkt znajduje się wyraźnie wewnątrz kolekcji zobacz contentSize.

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 
{ 
    NSIndexPath *indexPath = [_collectionView indexPathForItemAtPoint:(*targetContentOffset)]; 
    // Do something with indexPath  
} 

Co robię źle?

+0

Czemu pomocą ivar? Sprawdź, czy '_collectionView' sam nie jest pierwszy. – 7usam

+0

Próbowałem użyć samej zmiennej scrollView, ale wynik jest taki sam. Jestem pewien, że obie nie są zerowe, kiedy nazywam tę metodę. – DrMonkey68

Odpowiedz

0

CollectionView nie zna jeszcze pozycji indexPath dla targetContentOffset.

Musisz poprosić collectionViewLayout, aby podać atrybut przedmiotu, który będzie układ na tej pozycji.

spróbować czegoś takiego:

UICollectionViewLayoutAttributes *attribute = [_collectionView.collectionViewLayout layoutAttributesForElementsInRect:(CGRect){(*targetContentOffset).x, 0, 10, self.collectionView.bounds.size.height}][0]; 
Powiązane problemy