如何着色NSCollectionView的"过冲"背景

Nic*_*ari 3 macos cocoa appkit nscollectionview

我已经在Ray Wenderlich的教程之后在我的Cocoa应用程序上实现了一个集合视图(非常有用,考虑到这个领域中有多少错误和破坏了Apple的API).

在本教程中,使用以下代码将集合视图的画布涂成黑色(所有代码都在视图控制器类的viewDidLoad()方法中):

collectionView.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

然而,当您使用 - 例如 - 魔术鼠标/滚轮来超过("橡皮筋")滚动时"窥视"的区域仍然是白色且非常分散注意力:

在此输入图像描述

我试图让整个内容区域变黑.在我的故事板,我同时设置的背景颜色NSScrollViewNSClipView包含集合视图为黑色,但它不会改变外观.还尝试了程序化的替代方案:为scrollview设置插座并调用:

self.scrollview.backgroundColor = NSColor.black
self.scrollview.contentView.backgroundColor = NSColor.black
Run Code Online (Sandbox Code Playgroud)

......没有效果.

另外,我尝试过:

collectionView.superview?.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

......但这也不起作用.

也不是:

self.view.layer?.backgroundColor = NSColor.black.cgColor
Run Code Online (Sandbox Code Playgroud)

要么:

self.view.window?.backgroundColor = NSColor.black
Run Code Online (Sandbox Code Playgroud)

更新:

我已将滚动视图的背景颜色设置为红色,并设置drawsBackgroundtrue(以IB和编程方式).对于文档NSScrollViewbackgroundColor属性说:

此颜色用于绘制内容视图中文档视图未覆盖的区域.

我在运行时验证了文档视图确实是我的集合视图:

if scrollview.documentView is NSCollectionView {
        print("Document is collection")
}
Run Code Online (Sandbox Code Playgroud)

但是,不显示红色,文档(集合视图)之外的区域保持白色.


更新2:我解雇了View Hierarchy Debugger,似乎drawsBackground运行时的值为false(我true在代码故事板中设置了它)!:

在此输入图像描述

(虽然背景颜色本身似乎有所反映)

Jas*_*sey 5

  1. 在Interface Builder中,选择文档大纲中的CollectionView.
  2. 在"实用工具"窗口中,显示"属性"检查器.
  3. 在主色选择器控件中设置所需的颜色.

注意:您引用的Ray Wenderlich教程以编程方式设置集合视图的背景颜色.您要么删除该行,要么确保设置的颜色与上面步骤3中选择的颜色相同.

在此输入图像描述