Установка contentInsets должно дать некоторое дополнительное пространство вокруг первой и последней клетки:
После следует назвать:
[collectionView scrollToItemAtIndexPath:selectedItemPath
atScrollPosition:UICollectionViewScrollPositionCenteredVertically
animated:YES];
Это важно передать правильное положение прокрутки: UICollectionViewScrollPositionCenteredVertically
Это должен должным образом отрезать предмет.
EDIT
Это действительно странно, но после установки UIEdgeInsets методы вида коллекции scrollToItemAtIndexPath не работает должным образом, поэтому я сделать некоторые изменения:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
CGFloat collectionViewHeight = CGRectGetHeight(self.collectionView.frame);
[collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)];
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
CGPoint offset = CGPointMake(0, cell.center.y - collectionViewHeight/2);
[collectionView setContentOffset:offset animated:YES];
}
это прекрасно работает для меня.
Отметьте отредактированный ответ, я добавил некоторые изменения к нему – Mikhail