NSOutlineView显示三角形垂直偏离中心

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSOutlineView显示三角形垂直偏离中心相关的知识,希望对你有一定的参考价值。

我在macOS应用程序上使用NSOutlineView,它为可以扩展的项目提供了显示三角形。

我也在创建自定义NSTableCellView项目而不是使用基本单元格项目。这允许我在视觉上创建我想要的单元格。

我的问题是,当它们显示时,左侧的显示三角形不是垂直居中的。

enter image description here

注意公开三角形如何不正确对齐。它们比它们应该低一点。如果您滚动并返回,有时,它们会自动正确对齐。有没有人能够解决这个问题?

对于它的价值,我也使用以下代码用于单元格。

self.outlineView.rowHeight = CGFloat(integerLiteral: 66)
self.outlineView.usesAutomaticRowHeights = true
答案

如果不了解你如何设置你的项目,很难弄清楚问题是什么,但是我会试一试。

首先,当usesAutomaticRowHeights设置为true时,大纲视图使用“自动布局”来定位单元格视图。因此,您需要在Storyboard或Nib文件中使用约束,否则会出现奇怪的行为(请参阅:您的图片)。如果我不得不猜测,您在Interface Builder中设置的原型单元格视图将其autoresizingMask转换为自动布局约束(通常会导致大量问题)。

我会做的是:

  1. 打开包含大纲视图的Storyboard或Nib文档。
  2. 在画布左侧的“文档大纲”中找到包含街道名称文本字段的原型NSTableCellView实例。 (如果没有看到文档大纲,可以通过单击主菜单中的编辑器»显示文档大纲中的项目打开它。
  3. 接下来,看看您是否有任何约束。如果这样做,请通过在$ {YOUR_SCENE}标题为“所有视图”的菜单项“部分”下选择编辑器»解决自动布局问题»清除约束来删除它们。
  4. 现在,根据你的目标,有不同的方法来设置约束,但这就是我的建议。假设您希望街道名称与显示三角形垂直居中,我会在文本字段和其父单元格视图之间添加一个垂直约束,如下所示: 在“文档大纲”中选择文本字段后,单击Interface Builder主画布区域右下角的“对齐”图标(请参见图像)。 在出现的弹出窗口中,选中“在容器中垂直”旁边的复选框。 在弹出窗口右侧的文本字段中,输入值“0”。 最后,单击“添加1约束”按钮。

Adding a vertical constraint to a view in Interface Builder

您可能会看到一个红色错误(或黄色警告)符号显示,因为视图现在已选择自动布局,但它只有一个垂直位置的度量标准。所以我们现在需要添加一些约束来描述文本字段在x轴上的位置。像以前一样,我们将使用画布右下角的弹出按钮定义约束:

  1. 单击“添加新约束”按钮(“对齐”按钮右侧的按钮)。
  2. 在弹出窗口顶部的图表上,单击白色矩形左侧和右侧的淡红色线条。这告诉Interface Builder我们想要添加前导和尾随约束。
  3. 现在,在文本字段的每一侧输入所需的填充。在示例图像中,我在两侧都带有“4”点,但显然,您可以使用您认为最适合您的布局的任何值。
  4. 最后,单击“添加2个约束”按钮。

Adding horizontal constraints to a view in Interface Builder

现在出现的任何警告都应该消失,因为我们已经添加了足够的约束来描述文本字段的位置。理论上,您现在应该能够构建和运行项目,并且文本字段应该与显示三角形对齐。话虽如此,布局可能会有很多其他原因,并且考虑到usesAutomaticRowHeights是macOS High Sierra中的一个新API(并且史蒂夫·乔布斯已经不再将其击败到Apple开发人员那里制作一切Just Work™),那里可能是我不知道的问题。

或者,您可以将usesAutomaticRowHeights设置为false并使某些对象(例如视图控制器,NSObject子类等)符合NSOutlineViewDelegate协议并实现outlineView(_:heightOfRowByItem:)方法以返回您想要的任何高度的不同行。以这种方式调整行的优点是,您可以允许某些行更大或更小,具体取决于相应项的角色。关于这方面有很多教程,所以我不会在这里反复出现一个半生不熟的解释,但请随时通过谷歌“符合NSOutlineViewDelegate协议”获取更多信息。

无论如何,尝试上面的步骤,看看他们是否为你做了什么,如果他们没有,请告诉我。我可以根据需要和你一起深入兔洞,所以请问。祝好运!

以上是关于NSOutlineView显示三角形垂直偏离中心的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于视图的 NSOutlineView 中自定义 groupItem-look?

Cocoa NSOutlineView 取消选择先前的选择

具有垂直对齐图像的自定义 UITabBar

使用 CSS 修复自定义字体行高

OpenGL 将三角形网格缩放为单位立方体

文字稍微偏离中心