UICollectionView 显示两行,但我只想要一行

Posted

技术标签:

【中文标题】UICollectionView 显示两行,但我只想要一行【英文标题】:UICollectionView shows two line but I only want one line 【发布时间】:2014-06-10 02:26:47 【问题描述】:

我在使用 UICollectionView 时遇到了一个奇怪的错误,请看下图:

第三个单元格似乎以某种方式显示在第二个单元格下方,而第三个单元格的位置原来是空的。

当我滚动视图然后返回(或重新加载视图)时,它变成了正确的:

这是我使用的代码:

#pragma mark - UICollectionView Datasource
- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section 

    return datas.count;


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
    return 1;
 

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

    static NSString *cellId = @"floorCell";
    FloorCollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:cellId     forIndexPath:indexPath];
    NSDictionary *dic = [datas objectAtIndex:indexPath.row];
    cell.goodImageView.imageURL = [NSURL URLWithString:[dic objectForKey:@"img"]];
    cell.goodLabel.text = [dic objectForKey:@"title"];
    return cell;


我使用的Layout是UICollectionViewFlowLayout,layout的委托如下:

#pragma mark – UICollectionViewDelegateFlowLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    CGSize retval = CGSizeMake(172 / 2.0, [FloorCollectionViewCell getHeight]);
    return retval;



- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
    return UIEdgeInsetsMake(0, 0, 0, 0);

我想知道原因以及如何解决问题?谢谢!

初始化collectionView的代码:

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(50, 0, 278, bottomView.frame.size.height)  collectionViewLayout:layout];
    collectionView.backgroundColor = [UIColor clearColor];
    [collectionView registerClass:[FloorCollectionViewCell class] forCellWithReuseIdentifier:@"floorCell"];
    collectionView.dataSource = self;
    collectionView.delegate = self;
    [bottomView addSubview:collectionView];

ps:我想我已经通过将 collectionView 的高度更改为单元格的高度而不是整个灰色超级视图的高度来解决了这个问题。但是还是不知道是什么原因,灰色的superView的高度不够容纳两个cell!

更改的代码:

collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(50, 0, 278, [FloorCollectionViewCell getHeight])  collectionViewLayout:layout];

【问题讨论】:

请从您初始化集合的位置发布代码(可能在您的 viewdidload 中)。 @Thapa 我已附上代码 【参考方案1】:

我不知道是否还有必要再回答这个问题,但为了将来,您可以通过在 collection view 本身上设置 height constraint 来解决这个问题 strong> 这将强制集合视图不进入多行模式。这通常发生在您设置了具有不同优先级的自动布局约束并且集合视图有足够的空间展开时。

【讨论】:

以上是关于UICollectionView 显示两行,但我只想要一行的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 只显示 2 组数据

UICollectionView 不显示图片[重复]

Django:显示不同值的对象属性

UICollectionView 滚动到下一项

选择单元格时 UICollectionView 正在滚动

UICollectionView 的实际性能真的很差