Ios 如何以编程方式在UICollectionView中启用/禁用节标题?

Ios 如何以编程方式在UICollectionView中启用/禁用节标题?,ios,uicollectionview,uicollectionviewcell,Ios,Uicollectionview,Uicollectionviewcell,如何以编程方式在UICollectionView中启用/禁用节标题 它可以在情节提要(复选框)中轻松完成,但在代码中完成如何?当您不想在代理的 viewForSupplementaryElementOfKind 只需返回[UIView new]当kind==UICollectionElementKindSectionHeader: - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView vi

如何以编程方式在UICollectionView中启用/禁用节标题


它可以在情节提要(复选框)中轻松完成,但在代码中完成如何?

当您不想在代理的

viewForSupplementaryElementOfKind
只需
返回[UIView new]
kind==UICollectionElementKindSectionHeader:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{   
    if (kind == UICollectionElementKindSectionHeader) {
       return [UIView new]; // Or even nil, I think it would work.
    }
    ...
    return /*something else that you want to return*/ ;
}

您可以使用
UICollectionViewDelegateFlowLayout
collectionView:layout:ReferenceSizeForHeaderInstruction:
方法,并返回
cSizeMake(0,0)
,或者相应地设置
UICollectionViewFlowLayout
headerReferenceSize

编辑:
headerReferenceSize
实际上是故事板用于显示/隐藏标题的属性。我已经添加了故事板文件中的相关行

打开节复选框

 <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="xAt-Uo-bMl">
           <size key="headerReferenceSize" width="50" height="50"/></collectionViewFlowLayout>

使用部分复选框关闭


编辑#2:

发件人:

流布局中的每个部分都可以有自己的自定义页眉和页脚。要为视图配置页眉或页脚,必须将页眉或页脚的大小配置为非零。您可以通过实现适当的委托方法或为headerReferenceSize和footerReferenceSize属性指定适当的值来实现这一点。如果页眉或页脚大小为0,则不会将相应的视图添加到集合视图中


无论是nil还是[UIView new]都不会产生相同的错误。最好的答案是在

只需将不想显示的标题的高度更改为0

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return CGSizeZero;
    }else {
        return CGSizeMake(collectionView.frame.size.width,50);
    }
}

反对票?我错过什么了吗?谢谢。但是有没有办法完全禁用头文件?就像在故事板设计中一样?在设计器中禁用标题时实际会发生什么。我认为这只是一个参考。如果我不需要头,我总是不实现datasource/delegate方法,或者如果我需要,我总是实现它们。我真的不认为有一个真正的公共属性可以设置。如果你不想要任何节,你甚至可以在方法numberOfSectionsInCollectionView:1中返回0。您不能返回
nil
2。我确实实现了它,因为大多数时候我都需要标题。直到我需要禁用它们。我想你的解决办法行。但我仍然对原来的问题感到好奇。返回
[UIView new]
也不起作用。它发出了一个错误。我的问题是动态更改页脚大小。我在-(UICollectionReusableView*)collectionView:(UICollectionView*)collectionView视图中更改footerReferenceSize for SupplmentalElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath中的footerReferenceSize,并通过[self.collectionView性能更新:^{//更改布局的footerReferenceSize}完成:^(BOOL finished){}];不工作,它仍然显示collectionViewLayout referenceSizeForFooterInSection返回的初始值:(NSInteger)令人惊讶的是,它是故事板中的一个复选框,但你在代码中设置了一个高度。这对我来说并不合适。哦,好吧,这解决了我的问题,那就是我在ViewDidLoad之后使用异步方法才为CollectionView设置源代码。这在大多数CollectionView中都可以正常工作,但是带有补充视图的视图不允许这样做,所以我从s中禁用了它们toryboard,但在设置源代码后再设置它们。该代码甚至不会编译-返回50;不是大小。
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return CGSizeZero;
    }else {
        return CGSizeMake(collectionView.frame.size.width,50);
    }
}