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

标签 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 设置了约束,并且我相当确定它的设置正确,但我的项目高度保持固定为 50(我不知道在哪里设置)。

我正在尝试利用

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

但是我对此也没有太多运气,因为我不知道如何最好地确定尺寸应该是多少(在本例中为高度)

对于这个问题有什么建议吗?

谢谢!

最佳答案

您可以使用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)
}

关于macos - 如何让 NSCollectionView 项目具有基于文本字段的动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095047/

相关文章:

macos - 如何从目录 : macOS zsh 中删除或修剪 $PATH 变量的一部分

macos - mac os 10.6 雪豹下的 cron 作业

qt - 在Mac OS下如何将最新版本的GCC(4.6)与Qt一起使用?

cocoa - 使用 XCode4 创建 Cocoa Touch 静态库

multithreading - 为什么执行选择器:onThread: is not good?

cocoa - 多个 NSViewController 的 NS(Array|Tree) Controller 架构

C++ 编译 - x86_64 上的 GSL

macos - mac os 雪豹上的 freeglut 问题(通过 macports 构建良好)

macos - 如何改变NSTextView的lineSpacing?

ios - Xcode - 如何修复 'NSUnknownKeyException' ,原因 : … this class is not key value coding-compliant for the key X"error?