Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSOutlineView显示三角形垂直偏离中心_Swift_Macos_Cocoa_Nsoutlineview - Fatal编程技术网

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

Swift NSOutlineView显示三角形垂直偏离中心,swift,macos,cocoa,nsoutlineview,Swift,Macos,Cocoa,Nsoutlineview,我正在使用macOS应用程序上的NSOutlineView,它为可以扩展的项目提供了公开三角形 我还创建了自定义NSTableCellView项,而不是使用基本的单元格项。这使我能够创建我想要的可视化单元格 我的问题是,当它们被显示时,左侧的披露三角形没有垂直居中 请注意,这些三角形没有正确对齐。它们比应该的低了一点。有时,如果您滚动到别处并返回,它们会自动正确对齐。以前是否有人能够解决此问题 值得一提的是,我对单元格也使用了以下代码 self.outlineView.rowHeight =

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

我还创建了自定义
NSTableCellView
项,而不是使用基本的单元格项。这使我能够创建我想要的可视化单元格

我的问题是,当它们被显示时,左侧的披露三角形没有垂直居中

请注意,这些三角形没有正确对齐。它们比应该的低了一点。有时,如果您滚动到别处并返回,它们会自动正确对齐。以前是否有人能够解决此问题

值得一提的是,我对单元格也使用了以下代码

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

如果不看看你是如何建立你的项目的,就很难找出问题所在,但我要试一试

首先,当
useAutomaticRowHeights
设置为
true
时,大纲视图使用自动布局来定位单元视图。因此,您需要利用故事板或Nib文件中的约束,否则事情会表现得很奇怪(请参见:您的图片)。如果我不得不猜测的话,您在Interface Builder中设置的原型单元视图正在将其
autoresizingMask
转换为自动布局约束(这通常会导致大量问题)

我要做的是:

  • 打开包含大纲视图的故事板或Nib文档
  • 找到画布左侧文档大纲中包含街道名称文本字段的prototype
    NSTableCellView
    实例。(如果看不到文档大纲,可以单击主菜单中的编辑器»显示文档大纲中的项目打开文档大纲)
  • 接下来,查看是否有任何约束。如果需要,请在${YOUR_SCENE}中标题为所有视图的菜单项“section”下选择编辑器»解决自动布局问题»清除约束,将其删除
  • 现在,根据您的目的,有不同的方法来设置约束,但下面是我的建议。假设您希望街道名称与公开三角形垂直居中,我将在文本字段及其父单元格视图之间添加一个垂直约束,如下所示:

  • 在文档大纲中选择文本字段后,单击Interface Builder主画布区域右下角的对齐图标(见图)
  • 在出现的弹出窗口中,选中容器中垂直旁边的复选框
  • 在弹出框右侧的文本字段中,输入值“0”
  • 最后,单击“添加1个约束”按钮
  • 您可能会看到一个红色的错误(或黄色警告)标志出现,因为视图现在选择了自动布局,但它的垂直位置只有一个度量。因此,我们现在需要添加一些约束来描述文本字段在x轴上的位置。与前面一样,我们将使用画布右下方的popover按钮定义约束:

  • 单击添加新约束按钮(对齐按钮右侧的按钮)
  • 在弹出框顶部的图表上,单击白色矩形左右两侧的微弱红线。这告诉Interface Builder我们要添加前导约束和尾随约束
  • 现在,在文本字段的每一侧输入所需的填充。在示例图像中,我在两侧使用了“4”点,但显然,您可以使用您认为最适合布局的任何值
  • 最后,单击“添加2个约束”按钮
  • 任何出现的警告现在都应该消失,因为我们已经添加了足够的约束来描述文本字段的位置。理论上,您现在应该能够构建和运行您的项目,并且文本字段应该与公开三角形对齐。话虽如此,布局可能变得挑剔还有很多其他原因,考虑到
    usesAutomaticRowHeights
    是macOS High Sierra中的一个新API(史蒂夫·乔布斯不再在苹果开发者中击败它,让一切正常工作)™), 可能有一些我不知道的问题

    或者,您可以将
    UseSauticRowHeights
    设置为
    false
    ,并使某些对象(例如视图控制器、
    NSObject
    子类等)符合
    NSOutlineViewDeleteGate
    协议,并实现
    outlineView(u:heightOfRowByItem:)
    方法返回不同行所需的任意高度。采用这种方法调整行大小的好处是,您可以允许某些行变大或变小,具体取决于相应项目的角色。关于这一点,有很多教程,因此我不会在这里重复一个不完整的解释,但请随意使用谷歌“符合NSOutlineViewDelegate协议”了解更多信息

    不管怎样,试试上面的步骤,看看他们是否为你做了什么,如果他们没有,请告诉我。我可以根据你的需要和你一起深入兔子洞,所以尽管问吧。祝你好运