如何为 NSCollectionView 的 "Overshoot" 背景着色
How to Color the "Overshoot" Background of an NSCollectionView
我在 Ray Wenderlich's tutorial 之后的 Cocoa 应用程序上实现了 集合视图 (非常有帮助,考虑到 Apple 的 API就在这个区域)。
在教程中,使用以下代码将集合视图的 canvas 涂成黑色(所有代码都在视图控制器 class' viewDidLoad()
方法中):
collectionView.layer?.backgroundColor = NSColor.black.cgColor
然而,当您使用 - 例如 - 魔法 mouse/scrollwheel 过度("rubber-band")滚动时 "peeks" 的区域仍然是白色的并且非常分散注意力:
我正在尝试将整个内容区域设为黑色。在我的情节提要中,我将包含集合视图的 NSScrollView
和 NSClipView
的背景颜色设置为黑色,但它不会改变外观。
还尝试了编程替代方案:为滚动视图设置一个出口并调用:
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
属性 的文档说:
This color is used to paint areas inside the content view that aren’t
covered by the document view.
我已经在运行时验证文档视图确实是我的集合视图:
if scrollview.documentView is NSCollectionView {
print("Document is collection")
}
但是,没有显示红色,文档以外的区域(集合视图)保持白色。
更新 2: 我启动了 View Hierarchy Debugger,似乎 drawsBackground
的值在运行时为假(我将其设置为 true
在 代码 和 故事板中)!:
(虽然背景颜色本身似乎被反射了)
- 在 Interface Builder 中,select 文档大纲中的 CollectionView。
- 在实用工具 window 中,显示属性检查器。
- 在原色select或控件中设置所需的颜色。
注意:您引用的 Ray Wenderlich 教程以编程方式设置集合视图的背景颜色。您要么想要删除该行,要么确保您设置的颜色与您在上面的第 3 步中选择的颜色相同。
用于在 Swift 3 中以编程方式更改它,例如:
collectionView.backgroundColors = [NSColor.black]
只需在 self.collectionView.wantsLayer = true
中更改 self.view.wantsLayer = true
我在 Ray Wenderlich's tutorial 之后的 Cocoa 应用程序上实现了 集合视图 (非常有帮助,考虑到 Apple 的 API就在这个区域)。
在教程中,使用以下代码将集合视图的 canvas 涂成黑色(所有代码都在视图控制器 class' viewDidLoad()
方法中):
collectionView.layer?.backgroundColor = NSColor.black.cgColor
然而,当您使用 - 例如 - 魔法 mouse/scrollwheel 过度("rubber-band")滚动时 "peeks" 的区域仍然是白色的并且非常分散注意力:
我正在尝试将整个内容区域设为黑色。在我的情节提要中,我将包含集合视图的 NSScrollView
和 NSClipView
的背景颜色设置为黑色,但它不会改变外观。
还尝试了编程替代方案:为滚动视图设置一个出口并调用:
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
属性 的文档说:
This color is used to paint areas inside the content view that aren’t covered by the document view.
我已经在运行时验证文档视图确实是我的集合视图:
if scrollview.documentView is NSCollectionView {
print("Document is collection")
}
但是,没有显示红色,文档以外的区域(集合视图)保持白色。
更新 2: 我启动了 View Hierarchy Debugger,似乎 drawsBackground
的值在运行时为假(我将其设置为 true
在 代码 和 故事板中)!:
(虽然背景颜色本身似乎被反射了)
- 在 Interface Builder 中,select 文档大纲中的 CollectionView。
- 在实用工具 window 中,显示属性检查器。
- 在原色select或控件中设置所需的颜色。
注意:您引用的 Ray Wenderlich 教程以编程方式设置集合视图的背景颜色。您要么想要删除该行,要么确保您设置的颜色与您在上面的第 3 步中选择的颜色相同。
用于在 Swift 3 中以编程方式更改它,例如:
collectionView.backgroundColors = [NSColor.black]
只需在 self.collectionView.wantsLayer = true
self.view.wantsLayer = true