UICollectionView标题视图,如表视图标题(不是节标题)

时间:2018-06-13 08:19:22

标签: swift uicollectionview

是否可以像UITableView headerView一样创建UICollectionView标题视图?我的意思是整个集合视图的标题视图,而不是每个部分重复的标题视图。就像我想要的picture1,现在我已经完成的图片。

PictureOne

PictureTwo

4 个答案:

答案 0 :(得分:2)

如下所示

注册标题视图

collectionView.registerClass(HeaderView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "headerView")

在UICollectionViewDelegate

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

     if section == 0 {
    let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "headerView", forIndexPath: indexPath)

    headerView.frame.size.height = 100

    return headerView }

    else {
         return nil
   }
}

重要的是,您要提供带有标题大小的流式布局

flowLayout.headerReferenceSize = CGSize(width: self.collectionView.frame.width, height: 100)

否则委托方法不会被调用

希望你能得到帮助。

查看链接 - Add a simple UIView as header of UICollectionView

答案 1 :(得分:0)

我想在实现这一目标时使用一种解决方法。设置标题大小时,我会在设置之前检查节号。如果它是第一部分,我相应地设置高度 - 否则我将高度设置为0,因此它不可见

   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {

        if section == 0 {

            return CGSize(width: view.frame.width, height: 35)
        } else {

            return CGSize(width: view.frame.width, height: 0)
        }
    }

答案 2 :(得分:0)

是的,这是可能的。子类UICollectionViewLayout和覆盖layoutAttributesForSupplementaryView(ofKind:, at:)方法,以在IndexPath返回headerView的属性(行:0,部分:0)。

UIViewController方法中的headerView返回viewForSupplementaryElementOfKind

答案 3 :(得分:0)

我现在有解决方案。在collectionView中添加一个子视图,并将collectionView contentInset设置在topImageView下面,如下所示。

    topImageView.frame = CGRect(x: 5*SCREEN_SCALE, y: -125*SCREEN_SCALE, width: 285*SCREEN_SCALE, height: 120*SCREEN_SCALE)
    collectionView.addSubview(topImageView)
    collectionView.contentInset = UIEdgeInsets(top: 130*SCREEN_SCALE, left: 0, bottom: 0, right: 0)