我希望能够控制UICollectionView的标头,因为我需要删除它并根据用户生成的事件添加它。
到目前为止我尝试过:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section{
if(toRemoveHeader){
return CGSizeZero;
}else{
return CGSizeMake(320, 45);
}
}
然后在生成用户事件时调用[self.collectionView reloadData]
。我宁愿这样做而不重新加载数据。有什么想法吗?
答案 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