Xcode NSOutlineView和NSView封装布局高度内的NSTableView

Xcode NSOutlineView和NSView封装布局高度内的NSTableView,xcode,macos,swift,nstableview,nsoutlineview,Xcode,Macos,Swift,Nstableview,Nsoutlineview,我正在OSX10.10.5上使用Swift和Xcode 6.4构建一个OSX应用程序。 在我的应用程序的特定视图上,我希望有一个类似于数据模型编辑器上的Xcode的视图 我尝试使用大纲视图复制此视图,其中每个“行”都有一个标题和一个TableView加上两个按钮(用于加号和减号按钮)。出于测试目的,我将TableView+按钮的标题分开,类似于(这是许多不同尝试之一) 除具有TableView+按钮的视图外,所有内容都按预期工作,该视图的像素数从不超过17。如果我在一个视图中定义所有内容,我也会

我正在OSX10.10.5上使用Swift和Xcode 6.4构建一个OSX应用程序。 在我的应用程序的特定视图上,我希望有一个类似于数据模型编辑器上的Xcode的视图

我尝试使用大纲视图复制此视图,其中每个“行”都有一个标题和一个TableView加上两个按钮(用于加号和减号按钮)。出于测试目的,我将TableView+按钮的标题分开,类似于(这是许多不同尝试之一)

除具有TableView+按钮的视图外,所有内容都按预期工作,该视图的像素数从不超过17。如果我在一个视图中定义所有内容,我也会遇到同样的问题。我已尝试定义所需的约束,但在这种情况下,称为NSView封装布局高度的约束似乎自动出现问题,该约束将高度强制为17像素:

NSLayoutConstraint:0x6180008EA10“NSView封装布局高度” >V:[NotesTable(17)](名称:NotesTable:0x60000012e2e0)

我没有将任何约束定义为17像素,我尝试过使用一些通常插入自动约束的参数进行测试(autoresizesSubviews/translatesAutoresizingMaskIntoConstraints/autoresizingMask),但我只能将“特殊”约束转换为另一种格式,并且增长不会变大

尝试搜索web,但我只得到封装约束有意义且有用的情况


您知道在哪里或如何禁用该约束或将其值更改为所需的高度吗?

OS X上的表格和大纲视图不支持从单元格视图的动态高度自动确定行高度。它们要么具有明确的静态行高,要么具有由单元视图的设计时高度确定的静态行高,要么具有由委托及其对
-tableView:heightOfRow:
-outlineView:heightOfRowByItem:
的实现确定的动态行高

对于您的情况,您必须实现委托方法。此外,委托方法无法查询实际的单元格视图,因为它可能不存在,而outline视图在创建它之前需要行高。因此,代理必须以其他方式计算它

一种方法是保持原型单元视图的独立视图层次结构。当要求代理输入行高时,它会将该视图层次结构配置为该行/项的实际单元格视图,强制其布局,然后查询其高度。配置视图层次结构可能与设置顶级视图的
objectValue
一样简单(如果它是
NSTableCellView
、控件或以其他方式实现setter)。但是,如果您的代理执行其他配置,例如在其
-outlineView:viewForTableColumn:item:
方法中,那么您需要为这个原型视图层次结构复制该配置

此外,当影响行高度的任何因素发生变化时,您必须调用outline视图的
-notehightofrowswithindexchanged:
方法,让它知道这一点,因此它将重新查询
…heightOfRow…
方法


最后,裸表视图并不特别适合约束到同级视图或其超级视图。他们真的希望生活在滚动视图中,并继续使用弹簧和支柱来定位和调整自己的尺寸。有关此问题的讨论,请参阅。这可能在最新版本的操作系统中得到了改进。无论如何,您必须观察表视图的帧更改通知(并要求它发布此类通知),以便知道它何时增长。而且,您设置约束以将其与单元视图层次结构中的任何其他视图关联的能力将受到严重限制,因为它需要启用
translatesAutoresizingMaskIntoConstraints

非常感谢。