tutorial how example didselectitematindexpath collection swift uicollectionview uicollectionviewcell

how - uicollectionview swift 4



La barra de desplazamiento aparece incorrectamente debajo del encabezado de la sección UICollectionView (4)

Por alguna razón, mi barra de desplazamiento siempre aparece debajo del encabezado de la sección de vista de colección. ¡Cualquier ayuda es muy apreciada!


Aquí está mi alternativa que parece funcionar mejor en iOS12 al subclasificar UICollectionReusableView .

final class BasicCollectionSectionHeader: UICollectionReusableView { override var layer: CALayer { let layer = super.layer layer.zPosition = 0 // make the header appear below the collection view scroll bar return layer } }


Con una colección de carga asíncrona de desplazamiento largo, esta alternativa puede ofrecer un rendimiento ligeramente mejor.

class MyHeaderView: UICollectionReusableView { override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) { layer.zPosition = 0 } }


El mismo concepto, pero aquí hay una solución más sencilla que no requiere que sus instancias UICollectionReusableView utilicen una subclase.

Conforme con UICollectionViewDelegate (si aún no lo ha hecho) e implemente el método del protocolo willDisplaySupplementaryView así:

func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) { view.layer.zPosition = 0.0 }

Probado en iOS 11.2.1.


He encontrado una solución. Este problema es que la vista de colección está configurando incorrectamente la posición zPosition de la vista de encabezado. Para solucionar este problema, siempre nos aseguraremos de que la zPosition sea ​​nuestro valor deseado.

Cree una subclase CALayer que evite que la zPosition sea ​​diferente a 0.

class CustomLayer: CALayer { override var zPosition: CGFloat { get { return 0 } set {} } }

A continuación, establezca la clase de capa del encabezado de su vista de colección en esta nueva subclase.

class MyHeaderView: UICollectionReusableView { // your other custom code here override class var layerClass: AnyClass { get { return CustomLayer.self } } }

Este es un error de iOS 11, ya que este problema no ocurre en iOS 10. Esperemos que esto funcione lo suficientemente bien hasta que se solucione el error.