Ma cellule de collection personnalisée contient WKWebView
. Et je veux faire la taille de la cellule automatiquement à la taille de mon WKWebView
. Mais toutes mes tentatives pour activer les cellules auto dimensionnement, a échoué :(Vue de la présentation Mise en page La taille automatique ne fonctionne pas
Dans mon contrôleur je fais:
var p = self.htmlNotificationsCollectionView.collectionViewLayout as? NSCollectionViewFlowLayout
p?.estimatedItemSize = CGSize(width: self.htmlNotificationsCollectionView.frame.width, height: 120)
Comme la documentation écriture devrait alors déclencher la méthode preferredLayoutAttributesFitting
:
class HTMLNotificationCollectionViewItem: NSCollectionViewItem, WKNavigationDelegate {
override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
print("got it")
}
}
Mais rien ne fonctionne , méthode n'a pas appelé et mes cellules ont une hauteur fixe = 120
J'ai également essayé:
class HorizontallyFlushCollectionViewFlowLayout: NSCollectionViewFlowLayout {
override func layoutAttributesForItem(at indexPath: IndexPath) -> NSCollectionViewLayoutAttributes? {
let attributes = super.layoutAttributesForItem(at: indexPath)?.copy() as? NSCollectionViewLayoutAttributes
guard let collectionView = collectionView else { return attributes }
attributes?.frame.size.width = collectionView.frame.width - sectionInset.left - sectionInset.right
return attributes
}
override func layoutAttributesForElements(in rect: CGRect) -> [NSCollectionViewLayoutAttributes] {
let allAttributes = super.layoutAttributesForElements(in: rect)
return allAttributes.flatMap { attributes in
switch attributes.representedElementCategory {
case .item: return layoutAttributesForItem(at: attributes.indexPath!)
default: return attributes
}
}
}
}
Mais mon preferredLayoutAttributesFitting
au point ne fonctionne toujours pas appeler:
override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
print("DSADASDADASD")
return layoutAttributes
}
projet de test Ajouté:
https://github.com/Arti3DPlayer/SCollectionViewTests
vous attendez-vous à la cellule autoSize à la hauteur du _contents_ du WebView? – bjtitus
oui, et d'abord je veux commencer avec la hauteur de la cellule, puis la hauteur de webview. Ou vous avez une solution? – Arti
Les vues Web ne se redimensionnent pas. Vous devez obtenir la hauteur du contenu dans la vue Web et définir la hauteur de la vue Web en fonction de cela. https://stackoverflow.com/questions/13858290/ios-resize-uiwebview-after-didfinishload-content-should-fit-without-scrolling – bjtitus