2016-01-27 15 views
9

voglio aggiungere qualche distanza tra la mia intestazione e gli elementi reali, che attualmente simile a questa:UICollectionView: aggiungere spazio tra intestazione e articoli

screenshot1

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
    // Create header 
    switch kind{ 
     case UICollectionElementKindSectionHeader: 
      let headerView = iconCollectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "customIconHeaderView", forIndexPath: indexPath) as! CustonIconHeaderView 
      headerView.setUp() //add whatever into the view 
      return headerView 
     default: 
      assert(false, "Unexpected element kind") 
    } 

} 

risposta

0

Un modo che si può fare è quello di aumentare altezza del vostro contenitore di intestazione utilizzando

collectionView(_:layout:referenceSizeForHeaderInSection:)

Esempio:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { 
    return CGSize(width: 0, height: yourHeaderContentHeight + yourHeaderMarginToCell) 
} 

Edit:

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
    let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "YourID", forIndexPath: indexPath) 

    let yourCustomView = UIView(frame: CGRect(x: 0, y: 0, width: yourHeaderWidth, height: yourHeaderHeight)) 

    headerView.addSubview(yourCustomView) 

    return headerView 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize { 
    return CGSize(width: yourHeaderWidth, height: yourHeaderHeight + yourHeaderMargin) 
} 
+0

che ha appena aumentato l'altezza dell'intestazione, sto usando una vista personalizzata per l'intestazione però, non so se questo influisce su qualcosa – Liumx31

+0

Ad esempio, la tua vista di intestazione personalizzata è altezza '40' pt e' referenceSizeForHeaderInSection' è '60' che fornirà' pt' 20' in basso se si imposta 'frame' nella vista dell'intestazione personalizzata :) – Breek

+0

come si imposta l'altezza della vista personalizzata, sto facendo tutto nel codice. Lo faccio in 'viewForSupplementaryElementOfKind'? – Liumx31

12

Tu sei fondamentalmente parlando di aggiungendo un margine superiore alla sezione di visualizzazione di raccolta, per questo è necessario impostare top inserto per la sezione. Per farlo in codice, implementare insetForSectionAtIndex:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsets(top: 10.0, left: 1.0, bottom: 1.0, right: 1.0) 
} 

Se non si desidera implementare il insetForSectionAtIndex, si potrebbe anche fare qualcosa di simile in un metodo appropriato per esempio viewDidLoad:

let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
layout.sectionInset = UIEdgeInsets(top: 10.0, left: 1.0, bottom: 1.0, right: 1.0) 

In Interface Builder, vista Seleziona la raccolta e modificare il valore per Insets Sezione -> Top come mostrato nell'immagine qui sotto:

enter image description here

NOTA: Questo solo funziona se stai usando Flow Layout.

+0

Sto facendo tutto in codice , quando cambio 'insetForSectionAtIndex', aumenta anche il margine superiore dell'intestazione. Quindi tutto si muove verso il basso. – Liumx31

+0

stai dicendo che non vuoi implementare il metodo 'insetForSectionAtIndex'? in tal caso, si, puoi farlo anche tu: 'lascia layout = collection.collectionViewLayout as! UICollectionViewFlowLayout; layout.sectionInset = UIEdgeInsets (top: 10.0, left: 1.0, bottom: 1.0, right: 1.0); ' – ishaq

+0

no, ho implementato' insetForSectionAtIndex', che è attualmente 'UIEdgeInsets (top: 0.0, left: 20.0, bottom: 30.0, a destra: 20.0) ', ma quando cambio' top' per dire '10', non solo le voci si spostano verso il basso, anche l'intestazione si sposta verso il basso.ma quello che voglio è solo la spaziatura tra l'intestazione della sezione e gli elementi. – Liumx31

Problemi correlati