ios UICollectionView以编程方式删除标头

时间:2014-03-14 09:29:58

标签: ios uicollectionview uicollectionviewlayout

我希望能够控制UICollectionView的标头,因为我需要删除它并根据用户生成的事件添加它。

到目前为止我尝试过:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{

    if(toRemoveHeader){

        return CGSizeZero;

    }else{

        return CGSizeMake(320, 45);

    }
}

然后在生成用户事件时调用[self.collectionView reloadData]。我宁愿这样做而不重新加载数据。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您使用Swift,可以在var hideHeader: Bool = true //or false to not hide the header func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { if hideHeader { return CGSizeZero //supplementary view will not be displayed if height/width are 0 } else { return CGSizeMake(30,80) //size of your UICollectionReusableView } } 子类中执行此操作:

{{1}}

答案 1 :(得分:1)

您的实施功能齐全,问题可能是您没有将实现该功能的对象分配到delegate的{​​{1}}属性。

函数collectionView由确认collectionView:layout:referenceSizeForHeaderInSection:协议的类实现,UICollectionViewDelegateFlowLayout期望其collectionView实现此方法,不< / strong>其delegate

在我的一个实现中,只有在dataSource中没有单元格时才显示footer,并且只要section属性设置正确,它就能完美运行。

delegate