水平スクロールのコレクションビューがあり、各セルのサイズはビューと同じです。コレクションビューをページングしても、セルごとにページングされません。セルが画面の中央にありません。これを修正するためにいろいろ試しましたが、うまくいきませんでした。問題のビデオを以下に示します。https://www.youtube.com/watch?v=tXsxWelk16w何か案は?
ベストアンサー1
項目間のスペースを削除します。水平スクロール コレクション ビューの場合は、最小行間隔を 0 に設定します。これは、インターフェイス ビルダーまたはUICollectionViewDelegateFlowLayout
プロトコル メソッドを使用して実行できます。
- (CGFloat)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 0;
}
もう 1 つの方法は、アイテム間の水平方向のスペースの値に対して、セルの幅を collectionView の幅よりも小さくすることです。次に、アイテム間の水平方向のスペースの半分に等しい左と右のインセットを持つセクション インセットを追加します。たとえば、最小の行間隔は 10 です。
- (CGFloat)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 10;
}
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(collectionView.frame.size.width - 10, collectionView.frame.size.height);
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(0, 5, 0, 5);
}
3番目の方法: メソッドで collectionView のスクロール操作を行うscrollViewDidEndDecelerating:
:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (scrollView == self.collectionView) {
CGPoint currentCellOffset = self.collectionView.contentOffset;
currentCellOffset.x += self.collectionView.frame.size.width / 2;
NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:currentCellOffset];
[self.collectionView scrollToItemAtIndexPath:indexPath
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
animated:YES];
}
}