Ios 集合视图布局自身大小不起作用

Ios 集合视图布局自身大小不起作用,ios,swift,macos,cocoa,nscollectionview,Ios,Swift,Macos,Cocoa,Nscollectionview,我的自定义集合单元格包含WKWebView。我想自动将单元格高度设置为WKWebView的大小。但我所有的尝试都失败了: 在控制器中,我执行以下操作: var p = self.htmlNotificationsCollectionView.collectionViewLayout as? NSCollectionViewFlowLayout p?.estimatedItemSize = CGSize(width: self.htmlNotificationsCollectionView.fra

我的自定义集合单元格包含WKWebView。我想自动将单元格高度设置为WKWebView的大小。但我所有的尝试都失败了:

在控制器中,我执行以下操作:

var p = self.htmlNotificationsCollectionView.collectionViewLayout as? NSCollectionViewFlowLayout
p?.estimatedItemSize = CGSize(width: self.htmlNotificationsCollectionView.frame.width, height: 120)
在编写文档时,应触发PreferredLayoutAttribute拟合方法:

但这一切都不起作用,方法没有调用,我的单元格的固定高度为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
            }
        }
    }
}
但我的首选LayoutAttributesFitting项仍不调用:

override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes {
        print("DSADASDADASD")
        return layoutAttributes
    }
新增测试项目:

当文档写入时,应触发 PreferredLayoutAttribute拟合方法

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

在OSX10.11中,从未调用此方法

如果要自定义每个项目的大小,请改用NSCollectionViewDelegateFlowLayout协议的方法:

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

您希望单元格自动调整到webview内容的高度吗?是的,首先我想从单元格的高度开始,然后是webview的高度。或者您有解决方案?web视图不会自行调整大小。您需要获取web视图中内容的高度,并基于此设置web视图的高度@bjtitus是的,我知道,但我想首先解决自定尺寸集合视图的问题。是否有一个关于swift的项目示例,带有NSCollectionView自定尺寸单元格可能需要基于单元格的自定义高度height@Atri它和苹果一样,根本没有在NSCollectionViewItem中实现NSCollectionViewDelegateFlowLayout协议的可选方法。如果他们说您需要调用父级的preferredLayoutAttributesFitting,则在macOS 10.12.5上的objective-c运行时下不会检查此类方法。为什么您不能在模型中单独存储项目的高度并使用NSCollectionViewDelegateFlowLayout API?但是如果我的单元格每次都自动调整大小?@Arti您也可以在模型中存储已创建视图的列表。在10.13中,自定义布局也不需要此列表。不流动
extension ViewController : NSCollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: NSCollectionView,
                        layout collectionViewLayout: NSCollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> NSSize {
        return NSSize(width: self.myCollectionView.bounds.width, height: 180)
    }
}