在 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 一個 陰影 實例,然後再去修改它們即可。
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