禁用补充视图

Disable supplementary view

禁用补充视图的正确方法是什么(例如header)?有一次我想给他们看 (iPhone),有一次我不想给他们看 (iPad)。

我目前唯一的想法是 return referenceSizeForHeaderInSection 中的大小为零。但我认为创建根本不使用的视图有点开销。另一方面,我必须实施 collectionView:viewForSupplementaryElementOfKind:atIndexPath: 但我不能 return nil,因为应用程序会崩溃。

如何禁用 UICollectionView 中的补充视图?

如果您 return CGSizeZerocollectionView:layout:referenceSizeForHeaderInSection: 委托方法 collectionView:viewForSupplementaryElementOfKind:atIndexPath: 将不会被调用。

Apple Developer API 参考状态 collectionView(_:layout:referenceSizeForHeaderInSection:):

If the size in the appropriate scrolling dimension is 0, no header is added.


以下 Swift 5 代码片段显示了 collectionView(_:layout:referenceSizeForHeaderInSection:) 的可能实现,以便显示或不显示 UICollectionView 补充视图:

// MARK: - UICollectionViewDelegateFlowLayout

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad {
        return CGSize.zero
    } else {
        return CGSize(width: 0, height: 40)
        // or
        //let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
        //return flowLayout.headerReferenceSize
    }
}