1

Ich habe eine UICollectionViewController und möchte einen benutzerdefinierten Header hinzufügen.Swift: Header von UICollectionViewController überlappt Zellen

Ich überprüft Section Header im Interface Builder in meinem CollectionViewController und implementiert in meiner Unterklasse davon die viewForSupplementaryElementOfKind Funktion.

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView { 

    switch kind { 

    case UICollectionElementKindSectionHeader: 

     let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "myHeaderIdentifier", for: indexPath) 

     // !! NOT WORKING PROPERLY 
     // sectionHeader overlaps other cells 

     headerView.backgroundColor = UIColor(hue: 0.9, saturation: 1.0, brightness: 0.9, alpha: 1.0) 
     headerView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 250.0) 

     return headerView 

    default: 
     assert(false, "Unexpected element kind") 
    } 

} 

Die Änderungen werden wirksam, aber der Header (die rosa Fläche in der Abbildung unten) überlappt nun die regulären Zellen in der Collection.

enter image description here

Was mache ich falsch? Schätzen Sie jede Hilfe!

Antwort

2
public func layoutAttributesForSupplementaryElementOfKind(kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes? 

Hier Ich glaube, Sie sollten den Rahmen/Höhe

Es gibt auch headerReferenceSize in UICollectionViewFlowLayout, die Sie festlegen können, wenn die Erstellung Ihrer collectionView wenn es geht zu statisch sein

+0

Danke, Magoo! Die Verwendung von FlowLayout führte mich in die richtige Richtung, 'headerReferenceSize' macht genau das, was ich erreichen wollte. 'let flowLayout = self.collectionView? .collectionViewLayout als? UICollectionViewFlowLayout' – ixany

+0

Perfekt, froh, dass Sie es sortiert – Magoo

1

Mit dieser Methode setzen können, vom UICollectionViewDelegateFlowLayout Protokoll:

optional func collectionView(_ collectionView: UICollectionView, 
        layout collectionViewLayout: UICollectionViewLayout, 
     referenceSizeForHeaderInSection section: Int) -> CGSize { 
    return CGSize(width: UIScreen.main.bounds.width, height: 250.0) 
} 

Stellen Sie sicher, Ihre Klasse, die als gesetzt Delegat des Flusslayouts. Sie finden weitere Informationen here.

+0

Diese Funktion gibt ein CGSize-Objekt nicht eine Ganzzahl –

+0

Oops. Guter Fang. Ich werde aktualisieren. – Mark

Verwandte Themen