2012-12-17 24 views
29

我想使用UICollectionView显示缩略图的水平滚动列表,但是,我希望这是一行。在另一种观点上,我在UICollectionView中显示缩略图,但是这个缩略图是垂直滚动的,并且在一个列中。UICollectionView:一行或一列

目前,我这样做的方式是通过将集合视图的大小更改为只有足够大的一个项目,以便自动套用和运行,但现在我正在处理可变大小的项目,工作了。

如何使UICollectionView显示一行或一列?

回答

25

我猜你正在使用内置的Flow Layout。 但是,对于您的情况,您应该自定义UICollectionView Layout。 让它的UICollectionViewFlowLayout子类,并在init方法添加以下代码:

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

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

我希望这有助于!

+0

你知道这将如何影响内在内容的大小?我试图实现一个单行集合视图作为向上/向上滑动,并将其限制为单行的最小固有大小。谢谢! –

+1

如果有人想知道为什么这对他们不起作用,并且您从故事板内设置课程,请尝试在 - (id)initWithCoder:(NSCoder *)aDecoder { 而不是 – bitwit

+6

+1 - 是你不需要为此进行子类化(至少我没有)。在初始化我收藏的看法,我做了'flow.minimumInterItemSpacing = CGFloat_Max;' – Logan

12

我发现,设置minimumLineSpacing只是做了我的滚动区域非常大,并且设置minimumInteritemSpacing=big完成保持在一个滚动的行或列中的项目,在collectionview的正中。

+0

@giorashc,这是因为它它奠定了侧身,所以行会将会垂直在这种情况下布局。因此,为minimumInterItemSpacing设置一个较大的值将需要比屏幕高的空间更多的空间,并且它将水平地分成多行。 –

9

如果您可以信任类型转换,那么子类没有真正的理由。

((UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout).minimumLineSpacing = 1000.0f; 

如果从笔尖加载你的CollectionView你也可以玩弄的属性和大小检查员的参数。

滚动方向也一样。

0

当您初始化您的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) 
0
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];