带页眉和页脚的 NSCollectionView

NSCollectionView with Header and Footer

我需要这样的东西:

但我的代码是这样做的:

func collectionView(collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> NSView {
    let a = myView()
    if kind == NSCollectionElementKindSectionHeader {
        a.frame = NSMakeRect(0, 0, 1000, 10)
    }
    else if kind == NSCollectionElementKindSectionFooter {
        a.frame = NSMakeRect(0, 0, 1000, 12)
    }
    return a
}

func numberOfSectionsInCollectionView(collectionView: NSCollectionView) -> Int {
    return 3
}

override func numberOfItemsInSection(section: Int) -> Int {
    if section == 0 {
        return 5
    }
    else if section == 1 {
        return 5
    }
    return 10
}

两个页眉和页脚都在x=0,y=0的位置,那么如何从我的自定义视图(页眉和页脚)计算y位置?

我想你应该检查两件事

首先是单击您的集合视图属性检查器

你可以看到像这样勾选两个复选框

附件 * 节页眉,节页脚

第二个是覆盖关键字

我猜你应该把 override 关键字放在你的 func 关键字前面!

根据 Apple 的示例项目 CocoaSlideCollection,部分页眉和页脚可供 NSCollectionViewFlowLayout 使用,请查看 AAPLBrowserWindowControllerAAPLWrappedLayout 了解更多详细信息。

转换成Swift和英文:P,简述如下:

  1. 实施协议NSCollectionViewDelegateFlowLayout
  2. 实现了referenceSizeForHeaderInSectionreferenceSizeForFooterInSection
  3. 这两个方法
  4. viewForSupplementaryElementOfKind 将在步骤 2
  5. 之后调用

对于第 3 步,我使用以下代码

func collectionView(collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> NSView {
    var nibName: String?
    if kind == NSCollectionElementKindSectionHeader {
        nibName = "Header"
    } else if kind == NSCollectionElementKindSectionFooter {
        nibName = "Footer"
    }
    let view = collectionView.makeSupplementaryViewOfKind(kind, withIdentifier: nibName!, forIndexPath: indexPath)
    return view
}

这里使用的标识符nibName,链接到我创建的两个nib文件来设置NSView,即Header.xibFooter.xib

这是我得到的结果collectionView。

希望对您有所帮助,我正在为此创建一个视频教程。帮帮忙。

编辑 1:

Sample Code 现已可用