通常のhorizontalScrolling flowLayout UICollectionViewを、セル内のstimulatedItemSizeおよびpreferredLayoutAttributesFittingAttributesで作成したいと思います。しかし、最後のセルに問題があります。問題はどこにあるのでしょうか? プロジェクト自体
@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
私は同様の問題に直面し、UICollectionViewDelegateFlowLayoutのデリゲートメソッド-minimumInteritemSpacingForSectionAt-を使用して、適切な最小アイテム間スペースを与えることで問題が解決しました。
これを解決する簡単な方法があります。プロトタイプセルの数を追加して、必要な位置のセルをチェックできます。最後のセルで問題を見つけたら。インスペクターウィンドウでセルインセットを確認してください。
スーパーメソッドを呼び出しましたが、スーパーから返されたlayoutAttributesを使用しませんでした。
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
オリジナルのlayoutAttributesとスーパーのlayoutAttributesを印刷してみることができます。場合によっては、スーパー関数を呼び出す必要はありません。
次に、カスタムフローレイアウトを作成するか、セルを上に揃えるためにインセットを設定できます。私は自分のプロジェクトでこれを行いました。
ビュー自体の初期化で見積もられたアイテムサイズを設定しています。
一部のコントローラーで設定する必要があります。
また、
すべてのセルの高さが同じ場合は、このプロパティではなくitemSizeプロパティを使用して、代わりにセルサイズを指定します。
ドキュメント: estimatedItemSize
私は同様の小さなプロジェクト(1つのraw(1 * N)水平コレクションビュー)を実行しました。これがgithubです。私はそれがあなたの要件に役立つことを願っています。
カスタムセルのサイズは、コレクションビューのセルと同じでなければなりません。確認してください。問題が解決する場合があります。
あなたはそれを提案と考えることができます。私によると、UICollectionView
の高さはUICollectionViewCell
の高さよりも高く、それが原因です。それらを等しくしてください