5

一部の画像にコレクションビューを使用しています。

各画像は画面のサイズで表示する必要があるため、1つのセルに画面の幅があります。flowLayoutのminimumInterItemSpacingは25です。したがって、問題は、スクロールしている場合、コレクションビューが次の画像の先頭までスクロールせず、interItemSpacingの先頭までスクロールすることです。

例を挙げましょう:

Image/Cell width = 320
CollectionView's interItemSpacing = 25

1ページをスクロールすると、スクロールビューのコンテンツオフセットは345ではなく320になります。これは、2番目のセルが画面の中央にないことを意味します。

この問題を解決するにはどうすればよいですか?助言がありますか?

4

3 に答える 3

2

さて、私が見つけたのは、適切なスクロールを実現するための2つのオプションがあるということです。

1. UICollectionViewController size

必要な値をinterItemSpacingとして正確に追加することにより、コレクションビューとそのアイテムのサイズを増やします。

ここにいくつかのコードがあります:

- (void) setupCollectionView;
{
    PSTCollectionViewFlowLayout *flowLayout = [[PSTCollectionViewFlowLayout alloc] init];
    CGSize itemSize = self.view.bounds.size;
    itemSize.width +=25;
    [flowLayout setItemSize:itemSize];
    [flowLayout setScrollDirection:PSTCollectionViewScrollDirectionHorizontal];
    flowLayout.minimumInteritemSpacing = 0.0f;
    flowLayout.minimumLineSpacing = 0.0f;

    self.collectionView = [[PSTCollectionView alloc] initWithFrame:self.view.bounds
                                          collectionViewLayout:flowLayout];
    [self.collectionView registerClass:[AMDetailImageCell class]
        forCellWithReuseIdentifier:AMDetailImageCellIdentifier];
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    self.collectionView.pagingEnabled = YES;
    CGRect rectSize = self.view.bounds;
    rectSize.size.width +=25;
    self.collectionView.frame = rectSize;
    [self.view addSubview:self.collectionView];

    [self scrollToStartIndex];

}

2. SectionEdgeInset

1ページ=1セクションを作成してsectionEdgeInsetを使用すると、同じソリューションが得られますが、確かに、常にオプションであるとは限りません。

于 2013-02-19T14:45:48.970 に答える
0

iterItemSpacingも考慮して、セル幅を指定する必要があります。cellWidth = 320-25=295を指定してみてください。それならうまくいくはずです。

于 2013-02-05T10:19:36.417 に答える
0

私はそれに対する解決策を見つけました、そしてそれはUICollectionViewFlowLayoutをサブクラス化することを含みました。

CollectionViewCellのサイズは302X457で、最小行間隔を18(各セルに9pix)に設定しました。

そのクラスから拡張する場合、オーバーライドする必要のあるメソッドがいくつかあります。それらの1つは

  • (CGSize)collectionViewContentSize

このメソッドでは、UICollectionViewにあるものの合計幅を合計する必要がありました。これには、([データソース数] * widthOfCollectionViewCell)+([データソース数] * 18)が含まれます

これが私のカスタムUICollectionViewFlowLayoutメソッドです。

-(id)init
{
    if((self = [super init])){

       self.itemSize = CGSizeMake(302, 457);
       self.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
       self.minimumInteritemSpacing = 0.0f;
       self.minimumLineSpacing = 18.0f;
       [self setScrollDirection:UICollectionViewScrollDirectionHorizontal];
   }
    return self;
}



-(CGSize)collectionViewContentSize{
   return CGSizeMake((numCellsCount * 302)+(numCellsCount * 18), 457);
}

これは私にとってはうまくいったので、他の誰かがそれを役立つと思ってくれることを願っています!

于 2013-03-14T04:56:16.353 に答える