很难在不看到您如何设置项目的情况下弄清楚问题所在,但我会尽力解决。
首先,当将
usesAutomaticRowHeights
设置为
true
时,大纲视图使用自动布局来定位单元格视图。因此,您需要在Storyboard或Nib文件中利用约束条件,否则事情会变得奇怪(参见:您的图片)。如果我猜测正确,您在Interface Builder中设置的原型单元格视图正在将其
autoresizingMask
转换为自动布局约束条件(通常会引起大量问题)。
我会这样做:
- 打开包含大纲视图的故事板或 Nib 文档。
- 在左侧画布旁边的文档大纲中找到包含街道名称文本字段的原型
NSTableCellView
实例。(如果您看不到文档大纲,可以点击主菜单中的 编辑器 » 显示文档大纲 项来打开它)。
- 接下来,检查是否已经存在约束。如果有,请通过选择位于“所有视图 in ${YOUR_SCENE}”标题下的 编辑 » 解决自动布局问题 » 清除约束 菜单项来移除它们。
现在,根据你想要的效果,有不同的方法来设置约束,但是这里我建议的方式是这样的。假设你想让街道名称与披露三角形垂直居中,那么我会在文本字段和其父级单元格视图之间添加一个垂直约束,如下所示:
- 在文档大纲中选择文本字段,单击 Interface Builder 主画布区域右下角的 对齐 图标(见图片)。
- 在弹出的窗口中,勾选 容器垂直居中 复选框。
- 在窗口右侧的文本字段中,输入“0”的值。
- 最后,单击 “添加 1 个约束”按钮。
![Adding a vertical constraint to a view in Interface Builder](https://istack.dev59.com/6SjUV.webp)
你可能会看到一个红色的错误(或黄色的警告)标志出现,因为视图现在已经选择了自动布局,但它只有垂直位置的度量。所以我们现在需要添加一些约束条件来描述文本字段在x轴上应该被定位的位置。像之前一样,我们将使用画布右下角的弹出按钮定义约束条件:
1. 点击“添加新的约束”按钮(位于“对齐”按钮右侧)。
2. 在弹出窗口顶部的图表上,单击白色矩形左右两侧的淡红色线条。这告诉界面构建器我们要添加前导和尾随约束。
3. 现在,在每个文本字段的两侧输入你想要的填充值。在示例图片中,我选择了每个侧面都为“4”个点,但显然,你可以使用任何你认为最适合你的布局的值。
4. 最后,点击“添加2个约束”按钮。
![Adding horizontal constraints to a view in Interface Builder](https://istack.dev59.com/xaKtp.webp)
任何警告现在都应该消失了,因为我们已经添加了足够的约束来描述文本字段的位置。理论上,您现在应该能够构建和运行您的项目,并且文本字段应该与披露三角形对齐。话虽如此,布局出现问题有很多其他原因,考虑到
usesAutomaticRowHeights
是macOS High Sierra中的新API(而Steve Jobs不再在那里教导苹果开发人员使一切都正常工作™),我可能不知道存在的问题。
或者,您可以将usesAutomaticRowHeights
设置为false
,并让某些对象(例如视图控制器、NSObject
子类等)符合NSOutlineViewDelegate
协议并实现outlineView(_:heightOfRowByItem:)
方法返回您想要的任意高度以适应不同的行。通过这种方式调整行的大小的好处是,您可以允许某些行更大或更小,具体取决于相应项的角色。有很多关于此的教程,所以我不会在这里重复一个不成熟的解释,但是可以随时在Google上搜索“符合NSOutlineViewDelegate协议”获取更多信息。
无论如何,尝试以上步骤,看看它们是否对您有所帮助,如果没有,请告诉我。我可以和您一起深入探讨,只要您需要,随时提问。祝您好运!