如何着色NSCollectionView的“过冲”背景

时间:2017-03-14 05:25:20

标签: macos cocoa appkit nscollectionview

我已经在Ray Wenderlich's tutorial之后的Cocoa应用上实现了集合视图(非常有帮助,因为Apple的API在这方面有多么糟糕和破坏)。

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

collectionView.layer?.backgroundColor = NSColor.black.cgColor

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

enter image description here

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

self.scrollview.backgroundColor = NSColor.black
self.scrollview.contentView.backgroundColor = NSColor.black

......没有效果。

另外,我试过了:

collectionView.superview?.layer?.backgroundColor = NSColor.black.cgColor

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

也不是:

self.view.layer?.backgroundColor = NSColor.black.cgColor

或:

self.view.window?.backgroundColor = NSColor.black

更新

我已将滚动视图的背景颜色设置为红色,将drawsBackground设置为true(在IB中以编程方式设置)。 NSScrollView backgroundColor财产的文档说:

  

此颜色用于绘制内容视图中不是的区域   由文档视图覆盖。

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

if scrollview.documentView is NSCollectionView {
        print("Document is collection")
}

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

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

enter image description here

(背景颜色本身似乎反映出来了)

3 个答案:

答案 0 :(得分:5)

  1. 在Interface Builder中,选择文档大纲中的CollectionView。
  2. 在“工具”窗口中,显示“属性”检查器。
  3. 在主色选择器控件中设置所需的颜色。
  4. 注意:您引用的Ray Wenderlich教程以编程方式设置集合视图的背景颜色。您要么删除该行,要么确保设置的颜色与您在上面的步骤3中选择的颜色相同。

    enter image description here

答案 1 :(得分:4)

用于在Swift 3中以编程方式更改它,例如:

collectionView.backgroundColors = [NSColor.black]

答案 2 :(得分:0)

只需更改self.view.wantsLayer = true

中的self.collectionView.wantsLayer = true即可