透明 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
设置背景视图,则忽略此数组
您可以尝试将NSView
与frame
零作为backgroundView
用于NSCollectionView
【讨论】:
以上是关于透明 NSCollectionView 背景的主要内容,如果未能解决你的问题,请参考以下文章
Android WebView 样式背景颜色:在 android 2.2 上忽略透明