UICollectionView:一行或一列

Wil*_* T. 34 iphone xcode objective-c ios uicollectionview

我想用来UICollectionView显示水平滚动的缩略图列表,但是,我希望这是一行.在另一个视图中,我正在显示缩略图,UICollectionView但是这个缩略图垂直滚动,它在一列中.

目前,我这样做的方法是将集合视图的大小更改为仅对一个项目足够大,以便自动装配和工作,但现在我正在处理可变大小的项目,因此它不再起作用.

如何UICollectionView显示一行或一列?

Nik*_*rev 28

我猜你在使用内置的Flow Layout.但是,对于您的情况,您应该进行自定义UICollectionView Layout.将其作为子类UICollectionViewFlowLayout并在init方法中添加此代码:

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

minimumLineSpacing关键是使之有一条线在这里.

我希望这有帮助!

  • +1 - 一个注意事项是你不需要为此子类(至少我没有).在初始化我的集合视图时,我做了`flow.minimumInterItemSpacing = CGFloat_Max;` (8认同)

小智 12

我发现设置minimumLineSpacing刚刚创建的滚动区域非常大,并且设置minimumInteritemSpacing=big完成后将项目保存在一个滚动的行或列中,位于中间collectionview.


atr*_*eat 9

如果您可以信任类型转换,则没有真正的原因可以进行子类化.

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f;
Run Code Online (Sandbox Code Playgroud)

如果您从一个笔尖加载了您的collectionView,您还可以使用属性和大小检查器中的参数.

滚动方向也一样.


Ilk*_*aci 7

当您初始化您的UICollectionView传递时,请UICollectionViewFlowLayout在 init 参数中输入以下内容。

注意:您不需要创建子类 UICollectionViewFlowLayout

var collectionViewFlowControl = UICollectionViewFlowLayout()
collectionViewFlowControl.scrollDirection = UICollectionViewScrollDirection.Horizontal
Run Code Online (Sandbox Code Playgroud)

对于 0 px 单元格间距:

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

collectionView = UICollectionView(frame: CGRectMake(0, 0, self.view.frame.size.width, 120), collectionViewLayout: collectionViewFlowControl)
Run Code Online (Sandbox Code Playgroud)


mat*_*att 6

在 iOS 13 中,感谢 UICollectionViewCompositionalLayout,这是微不足道的,因为您可以在水平布局中指定每列的单元格数,或者在垂直布局中指定每行的单元格数。这是单个水平滚动、垂直居中的单元格行的简单示例:

func layout() -> UICollectionViewCompositionalLayout {
    let itemSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1),
        heightDimension: .fractionalHeight(1))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)
    let groupSize = NSCollectionLayoutSize(
        widthDimension: .absolute(75),
        heightDimension: .absolute(75))
    let group = NSCollectionLayoutGroup.vertical(
        layoutSize: groupSize, subitem: item, count: 1) // *
    group.edgeSpacing = NSCollectionLayoutEdgeSpacing(
        leading: nil, top: .flexible(0),
        trailing: nil, bottom: .flexible(0))
    let section = NSCollectionLayoutSection(group: group)
    section.interGroupSpacing = 65
    let config = UICollectionViewCompositionalLayoutConfiguration()
    config.scrollDirection = .horizontal
    let layout = UICollectionViewCompositionalLayout(
        section: section, configuration:config)
    return layout
}
Run Code Online (Sandbox Code Playgroud)

将您的集合视图设置collectionViewLayout为该函数调用的输出,一切就绪。

  • 这次真是万分感谢。对于任何需要知道如何插入此功能的人,请将该功能添加到视图控制器并设置您的集合视图,如下所示: yourCollection.collectionViewLayout = layout() (2认同)
  • @Marcy 很好的补充,谢谢。我也只是添加一个澄清句子。 (2认同)