我正在尝试向基于NSOutlineView的源列表底部添加按钮栏,这在许多Mac应用程序中都可以看到(包括苹果和第三方),如以下截图所示:
以文字来描述,控制栏与源列表共享特殊样式的渐变背景(或Yosemite下的"活力")而不重叠源列表的任何内容。为了复制这种效果,我目前已经尝试了以下方法:
- 向源列表滚动视图的裁剪视图的底部添加额外的"填充",高度与按钮栏相同,并允许栏覆盖源列表视图。只有当按钮栏的背景是不透明的且不会挡住滚动条时才有效。
- 使用其背景设置为源列表backgroundColor属性提供的NSColor的NSBoxes。这需要强制重绘很多次才能正确绘制(特别是在窗口活动/非活动状态下),但除此之外看起来完美。使用自定义的NSView设置绘制渐变背景会出现类似的行为。
是否有其他方法可以用于实现这一点?#2 是我能够接近的最好方法,但由于它带来的问题,显然不适用于第三方开发人员。
在Yosemite中使用Vibrancy应该很简单,只需要检查是否为Yosemite并插入打开Vibrancy的NSVisualEffectView即可。然而,在10.8 / 10.9下正确处理它则需要更多的操作……
我可以通过使用NSWindow提供的内置底部栏绘制来完全避免这个问题,但颜色混合的方法在视觉上更干净,更强烈地将控件与其父面板相关联,并且似乎越来越成为当今的首选样式。如果可能的话,我想在我的应用程序中使用它。