如何在集合视图中更改流项目顺序

Posted

技术标签:

【中文标题】如何在集合视图中更改流项目顺序【英文标题】:how to change the flow items order in collection view 【发布时间】:2016-06-20 10:23:49 【问题描述】:

默认情况下,在具有流式布局和水平方向的 UICollectionView 上,单元格从上到下,从左到右排序。像这样:

1 3 5 7  9 11
2 4 6 8 10 12

在我的例子中,collection view 是分页的,并且它的设计使得特定数量的单元格适合每个页面。因此,更自然的排序是:

1 2 3    7  8  9
4 5 6 - 10 11 12

我需要有相同的垂直流动的项目顺序但水平方向

我怎样才能做到这一点? 提前谢谢

【问题讨论】:

我认为您需要使用另一个自定义布局。我猜流布局是这样工作的。 【参考方案1】:

实现 UICollectionView 并创建自定义集合视图单元格,其中包含 6 个标签 ---

1 2 3
4 5 6

在集合视图中设置项目数:-

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

    return array.count;

设置部分数量:-

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

    return 1;

根据您的要求在索引路径设置布局大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 

    // set size of collection view cell (width, height)
    return CGSizeMake((self.view.frame.size.width)-40, 200);

集合视图数据具有不同的索引路径。在 CustomCollectionViewCell 类中制作标签的 IBOutlet 并连接到情节提要:-

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    CustomCollectionViewCell* customCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"waitingRoomTipId" forIndexPath:indexPath];

    // set data as per the requirement 
    customCell.label1.text = @"Label1";
    customCell.label2.text = @"Label2";
    customCell.label3.text = @"Label3";
    customCell.label4.text = @"Label4";
    customCell.label5.text = @"Label5";
    customCell.label6.text = @"Label6";

    return customCell;

这就是在每个单元格中显示六个标签的方式。

希望此解决方案对您有所帮助.. 谢谢

【讨论】:

【参考方案2】:

使用 UICollectionView 的 moveItemAtIndexPath sourceIndexPath: 来做到这一点。

它具有源和目标 Indexpath 值。只需将用户集合视图单元拖放到您需要的任何位置。

【讨论】:

以上是关于如何在集合视图中更改流项目顺序的主要内容,如果未能解决你的问题,请参考以下文章

如何更改coredata中的记录顺序?

使用自动布局更改方向时更改内容顺序

如何在集合视图中更改视图的颜色

如何更改集合视图锡约束中单元格的位置?

如何在运行时更改集合视图标题中的标签文本位置?

如何更改 Eloquent 集合中结果的顺序?