how - uicollectionview swift 4
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.