UICollectionView只有1个垂直“列”仍然流入2列

时间:2014-07-31 20:48:27

标签: ios iphone

我使用xCode 5,iOS 7,Storyboards创建了我认为的基本UICollectionView, AutoLayout OFF,但我得到了奇怪的结果。

我曾希望创建一个单一的"列" - 也就是说,所有单元格垂直堆叠,没有并排(例如TableView):

| 1 |

| 2 |

| 3 |

| 4 |

| 5 |

但是,我得到了这样的2列(我只能看到我是否水平滚动):

| 1 | | 2 |

| 3 | | 4 |

| 5 |

我的CollectionView与我的细胞宽度相同, 1个部分,没有插入,没有标题,滚动方向=垂直,布局=流程。

编辑:我尝试通过故事板添加5个单元格,它们按照我的要求排列,但在以编程方式添加时仍然没有排队...

EDIT2:仅供参考,我还有另一个UICollectionView工作正常 - 唯一的区别是它是4x4

如何实现单列'布局?

3 个答案:

答案 0 :(得分:2)

考虑实施-(CGSize)collectionView:layout:sizeForItemAtIndexPath:的{​​{1}}。您可以根据集合视图边界调整单元格。流程布局目前正在利用这样一个事实:当设备处于横向时,您的两个单元可以并排放置。

另一种方法是使用UICollectionViewDelegateFlowLayout

来修改某个部分的插入内容(即,您可以填充以便看到所有单个列)

答案 1 :(得分:0)

好吧,为了管理您的集合视图,您的视图控制器应遵循三个协议:UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout。这实际上意味着您需要覆盖:

    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return numberOfItems;
    }
    -(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    UICollectionViewCell *cell = (UICollectionViewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 
//configure your cell the way you want
    return cell;
}

为了获得一列,您必须将单元格的宽度设置为与collectionView的宽度相同或更多,但小于(单元格的双倍宽度+ interitem间距+ insets)

在cellForItemAtIndexPath:

尝试此操作
    CGRect a =cell.frame;
    a = GCRectMake(0,96*[indexPath.item intValue],113,96);
    cell.frame = a;

答案 2 :(得分:0)

这可以使用StoryBoard完成:

  1. 在属性检查器中,确保CollectionView布局为“Flow”,Scroll Direction设置为“Vertical”
  2. 选择尺寸检验器(“标尺”标签)
  3. 调整“Section Insets”部分下的LEFT和RIGHT值,增加值应调整单元格左右之间的“间隙”。一旦间隙变得太大而无法容纳一行中的多个单元格,集合视图将自动调整为每行一个单元格。
  4. enter image description here

    enter image description here