如何以编程方式更改Collection View footerview的高度

时间:2015-01-09 16:49:01

标签: uicollectionview uicollectionviewlayout

我遇到一个问题,在我的UICollectionView中,我需要在返回的记录为0时显示一个页脚。下面的代码似乎工作正常,当没有记录时,会显示页脚。但是,有一个问题是,当有记录时,虽然页脚被隐藏,代码LINE 1似乎没有任何效果,这意味着页脚的空白区域仍然存在。知道怎么摆脱它吗?即将页脚高度更改为0,或者在返回记录时删除页脚。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
    CGSize footerSize = CGSizeMake(320, self.view.frame.size.height);
    return footerSize;
  }

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;

    if (kind == UICollectionElementKindSectionFooter) {
        reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];
        reusableview.hidden = YES;
        if([topicArray count]>0){
            reusableview.hidden = YES;
            //reusableview.frame = CGRectMake(0, 0, 0, 0);
            CGRect newFrame = reusableview.frame;
            newFrame.size.height =0;
            reusableview.frame = newFrame; // <-------- LINE 1.
        }else{
            reusableview.hidden = NO;
            reusableview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
            UIImageView *oopsImgView =[[UIImageView alloc] initWithFrame:CGRectMake(60, 130,200,154)];
           UILabel *label=[[UILabel alloc] ....;
           label.adjustsFontSizeToFitWidth = YES;
           label.textAlignment = NSTextAlignmentCenter;
           label.lineBreakMode = NSLineBreakByWordWrapping;
           label.numberOfLines = 0;
           label.font = [UIFont boldSystemFontOfSize:16.0f];
           label.minimumScaleFactor = 10.0f/15.0f;
           [reusableview addSubview:label];
        }

    }

    return reusableview;
}

2 个答案:

答案 0 :(得分:19)

顺便问一下,你的self.view.frame.size.height是什么?我希望在任何时候都绝对不会为零。因为self.view是视图控制器内层次结构中的顶视图。

您无需在viewForSupplementaryElementOfKind:方法中更改页脚大小。所有你必须找到的是你不应该在特定部分显示你的页脚。

试试这个并告诉我这是否适合您。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
    BOOL sectionToHide = [self checkIfThisSectionToHide:section]; // find if the section to hide here..
    if (sectionToHide) {
        return CGSizeZero;
    }else {
        return CGSizeMake(320, self.view.frame.size.height);
    }
}

答案 1 :(得分:2)

<块引用>

Swift 版本:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
    if chackFlag // your condition 
    {
        return CGSize(width: collectionView.width, height: 50)
    }
    else
    {
        return.zero
    }
}