J'essaie d'ajouter un en-tête à une vue de collection liée à une requête Firebase avec FirebaseUI.UICollectionView viewForSupplementaryElementOfKind non appelé avec Firebase UI dataSource
J'ai configuré ma vue de collection avec un cadre statique pour l'en-tête de collection. (Je l'ai essayé une vue de collection avec un appel de délégué à sizeForHeaderInSection
au lieu du cadre statique définie dans la présentation La méthode déléguée pour viewForSupplementaryElementOfKind
n'est pas appelé peu importe..):
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.headerReferenceSize = CGSize(width: CGFloat(UIScreen.main.bounds.width), height: 100)
let view = UICollectionView(frame: .zero, collectionViewLayout: layout)
view.contentInset = UIEdgeInsetsMake(84, 0, 0, 0)
view.register(VideoPollCollectionViewCell.self, forCellWithReuseIdentifier: NSStringFromClass(VideoPollCollectionViewCell.self))
view.register(PollCollectionViewHeader.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: NSStringFromClass(PollCollectionViewHeader.self))
view.translatesAutoresizingMaskIntoConstraints = false
view.delegate = self
view.dataSource = self
view.tag = VideoPollCollectionType.polls.rawValue
return view
}()
Configurer la source de données dans viewDidLoad()
self.dataSource = self.collectionView.bind(to: self.videoPollQuery, populateCell: { (collectionView, indexPath, snap) -> UICollectionViewCell in
let videoPoll = VideoPoll(with: snap)
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(VideoPollCollectionViewCell.self), for: indexPath) as? VideoPollCollectionViewCell else { return UICollectionViewCell() }
cell.setPoll(with: videoPoll)
return cell
})
Ajouter la source de données FirebaseUI au niveau de la propriété d'instance:
lazy var videoPollQuery: DatabaseQuery = {
let ref = Database.database().reference(withPath: "/polls/")
return ref.queryOrderedByKey()
}()
var dataSource: FUICollectionViewDataSource!
Et ajouter le délégué/données l'extension source dans l'espoir que la méthode de chargement d'une vue d'en-tête de la collection est appelée
extension PollCollectionViewController: UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
guard let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: NSStringFromClass(PollCollectionViewHeader.self), for: indexPath) as? PollCollectionViewHeader else { return UICollectionReusableView() }
return view
}
}
Cela produit une vue collection avec un en-tête vide de la taille de l'image statique définie dans la présentation de la vue collection initialiseur ou le délégué sizeForHeaderInSection méthode. Après l'ajout d'un point d'arrêt dans le viewForSupplementaryElementOfKind
, j'ai été troublé de découvrir que cette fonction n'est pas appelée.
Est-ce que quelqu'un connaît la procédure correcte pour ajouter une sous-classe de UICollectionReusableView
en tant qu'en-tête à une vue de collection avec une source de données de Firebase?
Ajout cela ne provoque pas la 'viewForSupplementaryElementOfKind' à appeler. – thexande