如何让NSCollectionView项具有基于文本字段的动态高度

时间:2017-09-07 11:20:06

标签: macos cocoa

我有一个NSCollectionView,它在列表中显示项目。

enter image description here

我的布局由

定义
private func configureCollectionView() {
    let flowLayout = NSCollectionViewFlowLayout()

    flowLayout.itemSize.width = self.view.frame.width
    //flowLayout.itemSize.height = 50
    flowLayout.minimumLineSpacing = 8
    myCollectionView.collectionViewLayout = flowLayout
    view.wantsLayer = true
}

当输入一长串文本作为项目时,我试图让该“单元格”的项目高度随着文本内容的增长/扩展而变化。 我已经使用AutoLayout设置了我的contsraints,我相当确定它已正确设置,但我的项目高度仍然固定为50(我无法分辨这是设置的位置)。

我正在尝试利用

func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize 

但我也没有太多运气,因为我不知道如何最好地弄清楚尺寸应该是什么(在这种情况下的高度)

有关此问题的任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用所需宽度和足够高度的sizeThatFits

func collectionView(_ collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> NSSize {

    let string = strings[indexPath.item]
    let size = NSTextField(labelWithString: string).sizeThatFits(NSSize(width: 400, height: 800))

    return NSSize(width: 400, height: size.height > 80 ? size.height : 80)
}