title: Header of section in UICollectionView with custom UICollectionViewLayout
body: <p>I'm working on <code>UICollectionView</code> with custom layout. In two days I cannot understand how add header  to <code>UICollectionView</code>. I've got very simple view controller (created in storyboard with custom layout):</p>
  
  <pre><code>class ACollectionViewController: UICollectionViewController {
  
      enum Identifiers: String {
          case CellIdentifier = "Cell"
          case HeaderIdentifier = "Header"
      }
  
      override func viewDidLoad() {
          super.viewDidLoad()
          self.collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: Identifiers.HeaderIdentifier.rawValue)
      }
  
      // MARK: UICollectionViewDataSource
      override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -&gt; Int {
          return 1
      }
  
      override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -&gt; Int {
          return 10
      }
  
      override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -&gt; UICollectionViewCell {
          let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.CellIdentifier.rawValue, forIndexPath: indexPath) as Cell
          cell.backgroundColor = UIColor.redColor()
          return cell
      }
  
      override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -&gt; UICollectionReusableView {
          println("ip = \(indexPath.item)")
          var supplementaryView = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.HeaderIdentifier.rawValue, forIndexPath: indexPath) as UICollectionReusableView
          supplementaryView.backgroundColor = UIColor.blueColor()
          return supplementaryView
      }
  </code></pre>
  
  <p>And here is my custom layout:</p>
  
  <pre><code>class ALayout: UICollectionViewLayout {
  
      override func prepareLayout() {
          super.prepareLayout()
      }
  
      override func collectionViewContentSize() -&gt; CGSize {
          return self.collectionView!.bounds.size
      }
  
      let itemWidth = 40
      override func layoutAttributesForItemAtIndexPath(indexPath: NSIndexPath) -&gt; UICollectionViewLayoutAttributes! {
          var attributes = UICollectionViewLayoutAttributes(forCellWithIndexPath: indexPath)
  
          let x: Float = Float(10) * Float(indexPath.item)
          let y: Float = Float(indexPath.item * itemWidth)
          attributes.frame = CGRect(x: CGFloat(x), y: CGFloat(y), width: CGFloat(itemWidth), height: CGFloat(itemWidth))
  
          return attributes
      }
  
      override func layoutAttributesForElementsInRect(rect: CGRect) -&gt; [AnyObject]? {
          var attributes = [UICollectionViewLayoutAttributes]()
  
          let sectionsCount = self.collectionView!.dataSource!.numberOfSectionsInCollectionView!(self.collectionView!)
          for section in 0..&lt;sectionsCount {
              /// add header
              attributes.append(self.layoutAttributesForSupplementaryViewOfKind(UICollectionElementKindSectionHeader, atIndexPath: NSIndexPath(forItem: 0, inSection: section)))
  
              let itemsCount = self.collectionView!.numberOfItemsInSection(section)
              for item in 0..&lt;itemsCount {
                  let indexPath = NSIndexPath(forItem: item, inSection: section)
                  attributes.append(self.layoutAttributesForItemAtIndexPath(indexPath))
              }
          }
  
          return attributes
      }
  
      override func layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -&gt; UICollectionViewLayoutAttributes! {
          var attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: elementKind, withIndexPath: indexPath)
          attributes.frame = CGRect(x: 0, y: 0, width: 320, height: 50)
  
          return attributes
      }
  }
  </code></pre>
  
  <p>The problem is I don't understand how to add section header correctly, what indexPath of this header should be. There is the comment in code where header is added. App is crashing at start with error </p>
  
  <pre><code>2014-10-21 13:06:22.793 UICollectionViewLayout-Demo[3805:95924] *** Terminating app due to 
  uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of 
  kind: UICollectionElementKindCell with identifier Header - must register a nib or a class for 
  the identifier or connect a prototype cell in a storyboard'
  </code></pre>
  
  <p>And I understand, this is because cell has the same indexPath as section header I'm trying to add, but what should be indexPath of the header? Or maybe I'm doing it totally wrong?</p>
  
  <p>Thank you in advance.</p>