7

ページングが有効になっているUICollectionViewがあり、水平方向に移動している個々のビューが適切に中央に配置されていません。ビューが画面と同じ幅であることを確認しました。

UICollectionViewにビューを水平方向にページングさせる方法に関するポインタはありますか?

4

2 に答える 2

3

セクションインセット+行間隔+セル幅がすべてCollectionViewの境界と正確に等しいことを確認する必要があります。カスタムUICollectionViewFlowLayoutサブクラスで次のメソッドを使用します。

- (void)adjustSpacingForBounds:(CGRect)newBounds {
  NSInteger count = newBounds.size.width / self.itemSize.width - 1;

  CGFloat spacing = (newBounds.size.width - (self.itemSize.width * count)) / count;

  self.minimumLineSpacing = spacing;

  UIEdgeInsets insets = self.sectionInset;
  insets.left = spacing/2.0f;
  self.sectionInset = insets;
}

UICollectionViewはUIScrollViewの単なるサブクラスであるため、ページネーションをどのように機能させるかがわからないことを覚えておく必要があります。UICollectionViewの前に、UIScrollViewのサブビューをレイアウトするときに、このすべての計算を処理する必要があります。

于 2013-05-27T04:43:34.790 に答える
0

メソッドをオーバーライドします。

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    *targetContentOffset = scrollView.contentOffset; // set acceleration to 0.0
    float pageWidth = (float)self.articlesCollectionView.bounds.size.width;
    int minSpace = 10;

    int cellToSwipe = (scrollView.contentOffset.x)/(pageWidth + minSpace) + 0.5; // cell width + min spacing for lines
    if (cellToSwipe < 0) {
        cellToSwipe = 0;
    } else if (cellToSwipe >= self.articles.count) {
        cellToSwipe = self.articles.count - 1;
    }
    [self.articlesCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:cellToSwipe inSection:0] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}
于 2015-03-11T10:01:32.393 に答える