好的。我浏览了这些建议(它们通常在我提出问题之前就回答了我的问题)。我还没有找到我需要的东西。
我知道我做错了。我一直在 iOS (UIKit) 中这样做,但 NS (Mac) 中的表格与 UIKit 非常不同。
我有一个基于 View 的 NSTableView。每行恰好有 1 列。该列有一个带标题的 View (21 点高)和一个展开 View (行高 420 点)。标题左侧有一个显示三角形,可以切换这两种模式。
Controller 也是表数据源和委托(delegate)。我让行高回调返回 View 的正确值。
标题显示正常。我将行高设置为 21,并且仅显示标题。这会剪辑主视图。
当切换显示三角形时,一行会扩展其高度以显示整个 View :
很简单吧?
问题是B没有显示。我只是得到一个空白(但是,A 正确显示)。项目在那里,只是没有显示。表格行的高度正确(这可以通过使用交替行颜色来验证)。
我尝试在 View 上设置 setNeedsLayout/Draw 。
关于我可能做错了什么的任何线索吗?
我敢打赌我正在做一些愚蠢的事情,我会继续调查这一点。
最佳答案
使用noteHeighOfRowsWithIndexesChanged:
?它是一个 NSTableView 函数,而不是一个委托(delegate)函数。
在委托(delegate)函数 tableView:heightOfRow
的文档中声明:
Although table views may cache the returned values, you should ensure that this method is efficient. When you change a row's height you must invalidate the existing row height by calling noteHeightOfRowsWithIndexesChanged:. NSTableView automatically invalidates its entire row height cache when reloadData and noteNumberOfRowsChanged are called.
正如它提到的,NSTableView 的 reloadData
通常也是解决此类问题的懒惰方法。
您的表 Controller 不应该需要您尝试过的setsNeeds[whatever]方法。
此外,说到披露三角形等,在 OSX 上有一个名为 NSOutlineView 的 NSTableView 子类,如果您将数据破坏为记录不完善的树格式,它可以处理项目扩展。如果你的数据不是自然树,我实际上不会推荐它,但你应该意识到它,即使它的 API 很糟糕。哦,单击显示三角形时的展开是动画的。
关于objective-c - NSTableView:显示扩展行(动态调整大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23409928/