我在macOS应用上使用NSOutlineView
,它为可以展开的项目提供了显示三角形。
我也在创建自定义NSTableCellView
项,而不是使用基本单元格项。这允许我在视觉上创建我想要的单元格。
我的问题是,当它们显示时,左侧的显示三角形不会垂直居中。
请注意披露三角形未正确对齐的方式。它们比它们应该低一点。如果您滚动并返回,有时,它们会自动正确对齐。有没有人能够解决这个问题?
对于它的价值,我也使用以下代码来处理单元格。
self.outlineView.rowHeight = CGFloat(integerLiteral: 66)
self.outlineView.usesAutomaticRowHeights = true
答案 0 :(得分:0)
如果不了解你如何设置你的项目,很难弄清楚问题是什么,但是我会试一试。
首先,当usesAutomaticRowHeights
设置为true
时,大纲视图使用自动布局来定位单元格视图。因此,您需要在Storyboard或Nib文件中使用约束,否则会出现奇怪的行为(请参阅:您的图片)。如果我不得不猜测,您在Interface Builder中设置的原型单元格视图将其autoresizingMask
转换为自动布局约束(通常会导致大量问题)。
我要做的是:
NSTableCellView
实例。 (如果没有看到文档大纲,可以通过单击主菜单中编辑器»显示文档大纲中的项目打开它。现在,根据你的目标,有不同的方法可以设置约束,但这就是我的建议。假设您希望街道名称与显示三角形垂直居中,我会在文本字段和其父单元格视图之间添加一个垂直约束,如下所示:
您可能会看到一个红色错误(或黄色警告)符号显示,因为视图现在已选择自动布局,但它只有一个垂直位置的指标。所以我们现在需要添加一些约束来描述文本字段在x轴上的位置。和以前一样,我们将使用画布右下角的弹出按钮来定义约束:
现在出现的任何警告都应该消失,因为我们已经添加了足够的约束来描述文本字段的位置。理论上,您现在应该能够构建和运行项目,并且文本字段应该与显示三角形对齐。有了这个说法,布局可能会有很多其他原因,并且考虑usesAutomaticRowHeights
是macOS High Sierra中的一个新API(而且乔布斯已不再将其击败到Apple开发人员中,以使一切正常工作™),可能存在我不知道的问题。
或者,您可以将usesAutomaticRowHeights
设置为false
并使某个对象(例如视图控制器,NSObject
子类等)符合NSOutlineViewDelegate
协议并且实现outlineView(_:heightOfRowByItem:)
方法以返回任何您想要的不同行的任意高度。以这种方式调整行的优点是,您可以允许某些行更大或更小,具体取决于相应项的角色。有很多这方面的教程,所以我不会在这里反复出现一个半生不熟的解释,但请随时通过Google“符合NSOutlineViewDelegate协议”获取更多信息。
无论如何,尝试上面的步骤,看看他们是否为你做了什么,如果他们不这样做,请告诉我。我可以根据需要和你一起深入兔洞,所以请问。祝你好运!