在 iOS 上,如果我们要一个 View 显示阴影,那么基本上是这么做的:
1 2 3 4 5 |
self.view.layer?.shadowColor = NSColor.black.cgColor self.view.layer?.shadowOpacity = 0.1 self.view.layer?.shadowOffset = CGSize(width: 0, height: 0) self.view.layer?.shadowRadius = 3 self.view.layer?.masksToBounds = false |
不过,到了 macOS 上,这样就不灵了——没有任何效果。
答案在于 macOS 上如果你想要给一个 View 使用 layer ,你必须手动标记,比如说这样:
1 |
self.view.wantsLayer = true |
这下,如果你是 10.13,那么就万事大吉了,然后在 10.12 上发现——依旧没有效果。
这是为什么呢?在苹果的官方指南中,我们可以找到答案,说你不应该直接修改 NSView 的 layer 属性,所以你应该先创建一个 NSShadow() 实例,然后修改它的属性,最后把它赋值给 NSView 。比如下面的代码,才是正确操作:
1 2 3 4 5 6 7 8 9 10 11 |
self.view.wantsLayer = true let shadow = NSShadow() shadow.shadowColor = NSColor.black.cgColor shadow.shadowOpacity = 0.1 shadow.shadowOffset = CGSize(width: 0, height: 0) shadow.shadowRadius = 3 self.view.shadow = shadow self.view.layer?.backgroundColor = NSColor.white.cgColor self.view.layer?.cornerRadius = 8 self.view.layer?.masksToBounds = false |
或者,你也可以简单一点,先给 layer 一个 shadow 实例,然后再去修改它们即可。
1 2 3 4 5 6 7 8 9 10 |
self.view.wantsLayer = true self.view.shadow = NSShadow() self.view.layer?.backgroundColor = NSColor.white.cgColor self.view.layer?.cornerRadius = 8 self.view.layer?.shadowColor = NSColor.black.cgColor self.view.layer?.shadowOpacity = 0.1 self.view.layer?.shadowOffset = CGSize(width: 0, height: 0) self.view.layer?.shadowRadius = 3 self.view.layer?.masksToBounds = false |
本文由 落格博客 原创撰写:落格博客 » NSView 在 10.12 不显示 shadow 问题详解
转载请保留出处和原文链接:https://www.logcg.com/archives/2946.html