7

我正在尝试将 a 隐藏UICollectionViewCell在集合视图中。虽然我成功了

cell.hidden = YES; //or cell.alpha = 0.0;

但滚动后,单元格再次出现。我还尝试了以下方法:

UICollectionViewLayoutAttributes *layoutAttr = <get the layout attribute>//I'm succesfull here
layout.hidden = YES;
[cell applyLayoutAttributes:layoutAttr];

我认为这可能是因为我正在使用该dequeReusable..方法,因此该单元格正在被重新使用,但我也试图在该collectionView:cellForItemAtIndexPath:方法中隐藏该单元格,但无济于事。在这里它甚至似乎不起作用。

为什么这不起作用?我怎样才能隐藏一个UICollectionViewCell

编辑:包括实施collectionView:cellForItemAtIndexPath:

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

    static NSString *identifier = @"Cell";

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
    cell.layer.cornerRadius  = 12.0f;
    cell.backgroundColor = [UIColor colorWithRed:0.830 green:0.899 blue:1.000 alpha:1.000];

    cell.selectedBackgroundView = [[UIView alloc]initWithFrame:cell.frame];
    cell.selectedBackgroundView.backgroundColor = [UIColor lightTextColor];;
    cell.layer.borderColor = [UIColor blackColor].CGColor;
    cell.layer.borderWidth = 2.0f;
    cell.hidden = YES;
    UILabel *lbl = (UILabel *)[cell viewWithTag:10];
    NSArray *interArray = numberArray[indexPath.section];
    [lbl setText:[interArray[indexPath.row] stringValue]];

    return cell;



}

这应该隐藏所有单元格吧?但不,这不会发生。

4

4 回答 4

6

由于隐藏单元格本身似乎不起作用,您可以向单元格添加与集合视图的背景颜色相同颜色的子视图,或者您可以隐藏单元格的内容视图,这确实有效:

cell.contentView.hidden = YES;
cell.backgroundColor = self.collectionView.backgroundColor;

仅当您为单元格设置了背景颜色时,才需要第二行。

于 2013-07-15T19:49:41.773 回答
4

有一个简单的方法来做到这一点:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    CGSize retval;
......
//for the cell you want to hide: 
if(hidden_flag) 
  retval = CGSizeZero;
else
   retval = CGSizeMake(320,50);
return retal; 

您可以在上述函数中检查标志,如果设置了标志,则返回零大小的值;如果不是,则返回正常值。任何其他委托/数据源方法都不需要更改。该标志可以在其他地方设置/重置。标志更改后,您需要调用:

hidden_flag = YES; 
[self.collectionView reloadData];

没有必要改变cellForItemAtIndexPath

于 2015-04-15T05:22:43.690 回答
2

因为当您的单元格被滚动到视野之外时,它会被回收。当滚动回视图时,集合视图(或表格视图)将通过调用重新创建它cellForItemAtIndexPath。因此,当为应该隐藏的单元格调用此命令时,您将不得不再次隐藏它。

在您从collectionView:cellForItemAtIndexPath:该框架返回单元格后,可能会调用[setHidden:NO]它。您可能必须继承UICollectionViewCell并提供您自己的实现来完成此操作。或添加一个子视图以UICollectionViewCell包含您的内容,然后根据需要隐藏/显示此子视图。

于 2013-07-15T18:32:33.233 回答
1

我知道这个问题很老,但是对于使用 iOS 8+ 的未来开发人员来说,可以在 willDisplayCell 方法中隐藏单元格。

例如,此代码将单元格隐藏在 collectionView 垂直中心。

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
    //Hide cell at center
    CGPoint centerCellOffset = collectionView.contentOffset;
    centerCellOffset.x += collectionView.frame.size.width / 2;
    BOOL isCenterCell = CGRectContainsPoint(cell.frame, centerCellOffset);

    cell.hidden = isCenterCell;
}

(PS:在 iOS 10.3 上测试)

于 2017-04-26T08:35:35.553 回答