UICollectionView
を使用してサムネイルの水平スクロール可能リストを表示したいのですが、これを1行にしたいです。別のビューでは、サムネイルをUICollectionView
に表示していますが、これは垂直にスクロールし、単一の列にあります。
現在、これを行う方法は、コレクションビューのサイズを1つのアイテムだけに十分に大きくなるように変更して自動ラップして機能することですが、現在は可変サイズのアイテムを処理しているため、機能しなくなりました。
UICollectionView
を1行または1列に表示するにはどうすればよいですか?
ビルトインFlow Layout
。ただし、あなたの場合、カスタムUICollectionView Layout
。 UICollectionViewFlowLayout
のサブクラスにし、init
メソッドにこのコードを追加します。
- (id)init {
if ((self = [super init])) {
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumLineSpacing = 10000.0f;
}
return self;
}
minimumLineSpacing
は、ここに1行を作成するためのキーです。
これがお役に立てば幸いです!
minimumLineSpacing
を設定するとスクロール領域が非常に大きくなり、minimumInteritemSpacing=big
は、collectionview
の中央にある1つのスクロール行または列にアイテムを保持することを達成しました。
型キャストを信頼できる場合、サブクラス化する本当の理由はありません。
((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;
CollectionViewをペン先からロードしている場合は、Attributes and Size Inspectorsのパラメーターをいじることもできます。
スクロール方向についても同様です。
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
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)
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
他のソリューションから。
これが他の回答とはまったく異なるアプローチであるため、これが役立つことを願っています。
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];