gpt4 book ai didi

ios - Collection View 布局自身大小不起作用

转载 作者:行者123 更新时间:2023-11-28 15:25:59 25 4
gpt4 key购买 nike

我的自定义集合单元格包含 WKWebView。我想使单元格高度自动适应我的 WKWebView 的大小。但是我所有尝试打开自动调整单元格的尝试都失败了:(

在我的 Controller 中我这样做:

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
}
}
}
}

但是我在 Item 中的 preferredLayoutAttributesFitting 仍然没有调用:

override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
print("DSADASDADASD")
return layoutAttributes
}

添加测试项目:

https://github.com/Arti3DPlayer/SCollectionViewTests

enter image description here

最佳答案

As documentation write then should trigger preferredLayoutAttributesFitting method

此方法的文档还有一个特殊注意事项部分,即says :

In OS X 10.11, this method is never called.

如果您想为每个项目自定义尺寸,请使用 collectionView(_:layout:sizeForItemAt:) NSCollectionViewDelegateFlowLayout 协议(protocol)的方法代替:

extension ViewController : NSCollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: NSCollectionView,
layout collectionViewLayout: NSCollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> NSSize {
return NSSize(width: self.myCollectionView.bounds.width, height: 180)
}
}

关于ios - Collection View 布局自身大小不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45219285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com