web-dev-qa-db-ja.com

UICollectionViewstimatedItemSize-最後のセルが整列していません

通常のhorizo​​ntalScrolling flowLayout UICollectionViewを、セル内のstimulatedItemSizeおよびpreferredLayoutAttributesFittingAttributesで作成したいと思います。しかし、最後のセルに問題があります。問題はどこにあるのでしょうか? プロジェクト自体

enter image description here

@implementation RowCollectionView

- (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout
{
    if (self = [super initWithFrame:frame collectionViewLayout:layout])
    {
        [self configureRowCollectionView];
    }

    return self;
}

- (void) awakeFromNib
{
    [super awakeFromNib];

    [self configureRowCollectionView];
}

- (void) configureRowCollectionView
{
    self.backgroundColor = [UIColor lightGrayColor];

    self.dataSource = self;
    self.delegate = self;

    // Horizontal Direction
    UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout;
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    // Estimated Item Size
    flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height);


    [self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class])];
}

- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 10;
}

- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath];

    cell.contentView.backgroundColor = [UIColor redColor];

    return cell;
}

@end

@implementation RowCollectionViewCell

- (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
    [super preferredLayoutAttributesFittingAttributes:layoutAttributes];

    UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy];

    attributes.size = CGSizeMake(80, 80);

    return attributes;
}

@end    
33
artysx

私は同様の問題に直面し、UICollectionViewDelegateFlowLayoutのデリゲートメソッド-minimumInteritemSpacingForSectionAt-を使用して、適切な最小アイテム間スペースを与えることで問題が解決しました。

2
Romit Kumar

これを解決する簡単な方法があります。プロトタイプセルの数を追加して、必要な位置のセルをチェックできます。最後のセルで問題を見つけたら。インスペクターウィンドウでセルインセットを確認してください。

1
Abhi

スーパーメソッドを呼び出しましたが、スーパーから返されたlayoutAttributesを使用しませんでした。

    [super preferredLayoutAttributesFittingAttributes:layoutAttributes];

オリジナルのlayoutAttributesとスーパーのlayoutAttributesを印刷してみることができます。場合によっては、スーパー関数を呼び出す必要はありません。

次に、カスタムフローレイアウトを作成するか、セルを上に揃えるためにインセットを設定できます。私は自分のプロジェクトでこれを行いました。

1
Yang Young

ビュー自体の初期化で見積もられたアイテムサイズを設定しています。

一部のコントローラーで設定する必要があります。

また、

すべてのセルの高さが同じ場合は、このプロパティではなくitemSizeプロパティを使用して、代わりにセルサイズを指定します。

ドキュメント: estimatedItemSize

1
neelamc23

私は同様の小さなプロジェクト(1つのraw(1 * N)水平コレクションビュー)を実行しました。これがgithubです。私はそれがあなたの要件に役立つことを願っています。

https://github.com/texas16/Horizo​​ntalCollectionView

0
casillas

カスタムセルのサイズは、コレクションビューのセルと同じでなければなりません。確認してください。問題が解決する場合があります。

0
iOSBeginner

あなたはそれを提案と考えることができます。私によると、UICollectionViewの高さはUICollectionViewCellの高さよりも高く、それが原因です。それらを等しくしてください

0
ajjjjjjjj