我的自定义集合单元格包含WKWebView。我想要使单元格高度自动达到我的WKWebView大小。但我所有打开自我大小单元格的尝试都失败了:
在我的控制器里:
var p = self.htmlNotificationsCollectionView.collectionViewLayout as? NSCollectionViewFlowLayout
p?.estimatedItemSize = CGSize(width: self.htmlNotificationsCollectionView.frame.width, height: 120)然后,随着文档的编写,应该触发preferredLayoutAttributesFitting方法:
class HTMLNotificationCollectionViewItem: NSCollectionViewItem, WKNavigationDelegate {
override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
print("got it")
}
}但是没有工作,方法没有调用,我的单元格有固定的高度= 120
我也试过:
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
}
}
}
}但是项目中的preferredLayoutAttributesFitting仍然没有调用:
override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
print("DSADASDADASD")
return layoutAttributes
}新增测试项目:
https://github.com/Arti3DPlayer/SCollectionViewTests

发布于 2017-07-23 11:53:48
当文档写入时,应该触发
preferredLayoutAttributesFitting方法
此方法的文档还包含一个特殊注意事项部分,即他说
在OSX10.11中,从未调用此方法。
如果要自定义每个项的大小,请使用NSCollectionViewDelegateFlowLayout协议的NSCollectionViewDelegateFlowLayout方法:
extension ViewController : NSCollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: NSCollectionView,
layout collectionViewLayout: NSCollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> NSSize {
return NSSize(width: self.myCollectionView.bounds.width, height: 180)
}
}https://stackoverflow.com/questions/45219285
复制相似问题