Ios UICollectionView水平滚动,数据从左向右流动

Ios UICollectionView水平滚动,数据从左向右流动,ios,ios7,uicollectionview,uicollectionviewlayout,Ios,Ios7,Uicollectionview,Uicollectionviewlayout,我在这里看到了一个类似的问题:。但是,解决方案涉及重写UICollectionViewFlowLayout,以对单元格重新排序。但在我的例子中,我不想对单元格重新排序,只想相应地转换数据源 我正在创建水平滚动的UICollectionView。默认情况下,项目从上到下排列: cell1 cell4 cell7 cell10 cell2 cell5 cell8 cell11 cell3 cell6 cell9 cell12 我对细胞的物理流动很满意。但是,我希望数据从左向右流动

我在这里看到了一个类似的问题:。但是,解决方案涉及重写
UICollectionViewFlowLayout
,以对单元格重新排序。但在我的例子中,我不想对单元格重新排序,只想相应地转换数据源

我正在创建水平滚动的UICollectionView。默认情况下,项目从上到下排列:

cell1  cell4  cell7  cell10
cell2  cell5  cell8  cell11
cell3  cell6  cell9  cell12
我对细胞的物理流动很满意。但是,我希望数据从左向右流动:

data1  data2  data3  data4 
data5  data6  data7  data8 
data9  data10 data11 data12
只需使用
indexPath.item
来确定要使用的数据将不起作用。我必须以某种方式“转换”索引。例如,要显示cell2的内容,我需要使用data5,而不是data2

大致如下:

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

   NSInteger index = //Use proper index based on transformed indexPath.item, instead of just indexPath.item
   NSDate *cellDate = [self.dateArray objectAtIndex:index]
   ...
}

关于如何进行这种转变,有什么想法吗?

想一想如何做到这一点:

 -(NSDate*)cellDateBasedOnIndexPath:(NSIndexPath*)indexPath {
     NSInteger row = indexPath.item % NUMBER_OF_ROWS + 1;
     NSInteger column = indexPath.item/NUMBER_OF_ROWS + 1;
     NSInteger itemIndex = row * NUMBER_OF_COLUMNS - (NUMBER_OF_COLUMNS - column) - 1;

     //Use itemIndex to index through the data source...

 }

您可以在collectionView的Xcode情节提要中,通过取消选中属性检查器中下拉菜单下隐藏的选项,将单元格上的约束设置为不遵守语言方向。