Pour une raison quelconque, ma barre de défilement apparaît toujours sous l'en-tête de la section d'affichage de la collection. Toute aide est grandement appréciée!
Réponses
Trop de publicités?J'ai trouvé une solution de contournement. Cette question est que l' zPosition
de l'en-tête de la vue est définie par l'affichage de la collection de manière incorrecte. Pour résoudre ce problème, nous ferons toujours en sorte que l' zPosition
est notre valeur souhaitée.
Créer un CALayer
sous-classe qui empêche l' zPosition
d'être autre chose que 0.
class CustomLayer: CALayer {
override var zPosition: CGFloat {
get { return 0 }
set {}
}
}
Définissez ensuite la couche de la classe de votre collection de la vue d'en-tête de cette nouvelle sous-classe.
class MyHeaderView: UICollectionReusableView {
// your other custom code here
override class var layerClass: AnyClass {
get { return CustomLayer.self }
}
}
C'est un iOS 11 bug, que ce problème ne se produit pas dans iOS 10. J'espère que cela fonctionne assez bien jusqu'à ce que le bug est corrigé.
Même concept, mais voici une solution de contournement plus simple qui ne nécessite pas que vos instances UICollectionReusableView
utilisent une sous-classe.
Se conformer à UICollectionViewDelegate
(si vous ne l'avez pas déjà fait) et implémenter la méthode du protocole willDisplaySupplementaryView comme ceci:
func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) {
view.layer.zPosition = 0.0
}
Testé dans iOS 11.2.1.
Voici mon alternative qui semble mieux fonctionner sur iOS12 lors du sous- classement 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
}
}