web-dev-qa-db-ja.com

UICollectionView:1行または1列

UICollectionViewを使用してサムネイルの水平スクロール可能リストを表示したいのですが、これを1行にしたいです。別のビューでは、サムネイルをUICollectionViewに表示していますが、これは垂直にスクロールし、単一の列にあります。

現在、これを行う方法は、コレクションビューのサイズを1つのアイテムだけに十分に大きくなるように変更して自動ラップして機能することですが、現在は可変サイズのアイテムを処理しているため、機能しなくなりました。

UICollectionViewを1行または1列に表示するにはどうすればよいですか?

34
William T.

ビルトインFlow Layout。ただし、あなたの場合、カスタムUICollectionView LayoutUICollectionViewFlowLayoutのサブクラスにし、initメソッドにこのコードを追加します。

- (id)init {
    if ((self = [super init])) {
        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        self.minimumLineSpacing = 10000.0f;
    }
    return self; 
}

minimumLineSpacingは、ここに1行を作成するためのキーです。

これがお役に立てば幸いです!

27
Nikola Kirev

minimumLineSpacingを設定するとスクロール領域が非常に大きくなり、minimumInteritemSpacing=bigは、collectionviewの中央にある1つのスクロール行または列にアイテムを保持することを達成しました。

12
sidekickr

型キャストを信頼できる場合、サブクラス化する本当の理由はありません。

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;

CollectionViewをペン先からロードしている場合は、Attributes and Size Inspectorsのパラメーターをいじることもできます。

スクロール方向についても同様です。

9
atreat

Swift 3

let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: UIScreen.main.bounds.width/2-10, height: 190)
flowLayout.sectionInset = UIEdgeInsetsMake(0, 5, 0, 5)
flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
flowLayout.minimumInteritemSpacing = 0.0
self.gCollectionView.collectionViewLayout = flowLayout
2
Azhar

UICollectionViewを初期化するとき、initパラメーターに次のUICollectionViewFlowLayoutを渡します。

注:UICollectionViewFlowLayoutのサブクラスを作成する必要はありません

var collectionViewFlowControl = UICollectionViewFlowLayout()
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal

0 pxのセル間隔の場合:

collectionViewFlowControl.minimumInteritemSpacing = 0;
collectionViewFlowControl.minimumLineSpacing = 0;

collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl)
2
Ilker Baltaci

これにより、CollectionViewの高さに関係なく、1行のセルを取得できました。セルの最小間隔を1000に設定します

Storyboard UICollectionView

1
Jiebe

1列を左揃えにしたかったのですが、他の答えは役に立ちませんでした。

そこで、ここに、左揃えの1つの列に対する非常に単純なソリューションを示します。

class GCOneColumnLeftAlignedFlowLayout: UICollectionViewFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)

        var y: CGFloat = sectionInset.top
        attributes?.forEach { layoutAttribute in
            layoutAttribute.frame.Origin.x = sectionInset.left
            layoutAttribute.frame.Origin.y = y
            y = y + layoutAttribute.frame.height + minimumLineSpacing
        }

        return attributes
    }
}

また、次のようなものを設定する必要があります

estimatedItemSize = CGSize(width: 120, height: 40)

行を削除することを忘れないでください

minimumLineSpacing = big number

他のソリューションから。

これが他の回答とはまったく異なるアプローチであるため、これが役立つことを願っています。

0
Gerd Castan
 UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
 [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

 layout.minimumInteritemSpacing = 0;
 layout.minimumLineSpacing = 0;


 blendEffectCollectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 95, 320, 60) collectionViewLayout:layout];
 [blendEffectCollectionView setDataSource:self];
 [blendEffectCollectionView setDelegate:self];
 [blendEffectCollectionView registerClass:[BlendModeCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
 [blendEffectCollectionView setBackgroundColor:[UIColor clearColor]];

 [bottomActivityView addSubview:blendEffectCollectionView];
0
ajjjjjjjj