透明 NSCollectionView 背景

Posted

技术标签:

【中文标题】透明 NSCollectionView 背景【英文标题】:Transparent NSCollectionView Background 【发布时间】:2017-06-22 20:05:27 【问题描述】:

我再次为将 NSViews 背景颜色设置为透明而苦苦挣扎。我有一个NSCollectionView 作为NSClipView 的一部分,它是NSScrollview 的一部分。我的MainViewController 有一个到collectionView 的出口。添加两行代码并编译后背景有时是透明的,但大多数时候不是:

view.wantsLayer = true
collectionView.layer?.backgroundColor = NSColor.clear.cgColor

我还尝试在 IB 中选择/取消选择 NSScrollView 的“绘制背景”属性,但没有任何效果。 我在这里想念什么。

【问题讨论】:

Cocoa 不如 UIKit 好。然而,这只是创建一个子类的问题。 El Tomato,感谢您的回复。我需要子类化什么,为什么?谢谢。 【参考方案1】:

我试图让我的 NSCollectionView 背景“透明”@JFS 解决方案为我指明了正确的方向:我终于通过设置 both 父 scrollView 和 collectionView 背景来实现它:

cvScrollView.backgroundColor = NSColor.clear
collectionView.backgroundColors = [NSColor.clear]

【讨论】:

【参考方案2】:

好的,经过漫长的试错阶段,我至少为自己找到了解决方案。为了获得正确的行为,需要设置两种背景颜色:

    NSScrollView的背景颜色:

    NSCollectionView 原色:

两者都必须适当设置。在这一点上,我将两者都设置为相同的颜色,我得到了我想要的背景。仅设置 ScrollView 背景颜色时,在 CollectionView 中滚动项目时仍然是白色背景。

【讨论】:

【参考方案3】:

要为NSScrollView 制作清晰的背景,Swift 4.2 中的最佳选项是“不绘制背景”。让我们来看一个程序化的例子:

let scrollView = NSScrollView()
scrollView.drawsBackground = false
scrollView.contentView.drawsBackground = false

NSCollectionView 有部分的背景,所以你需要为部分指定颜色

let collectionView = NSCollectionView()
collectionView.backgroundColors = [.clear]

如果您将backgroundColors 设置为nil 或空数组,则背景颜色默认设置为白色。

如果为NSCollectionView 设置背景视图,则忽略此数组

您可以尝试将NSViewframe 零作为backgroundView 用于NSCollectionView

【讨论】:

以上是关于透明 NSCollectionView 背景的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView 样式背景颜色:在 android 2.2 上忽略透明

如何使 Recyclerview 和 Cardview 透明

NSCollectionView 斯威夫特

带有网络图像的 NSCollectionView

GCD 块不更新 NSCollectionView

NSCollectionView+NSScrollView 中的鼠标悬停