在MacOS上使用NSWindow展示了多种不同风格的窗口

Swift NSWindow Style Showcase

A showcase of many of the different styles of windows possible with NSWindow on MacOS. In some examples, NSToolbar, and NSVisualEffectView are used. No private API's are used.

To test each style, clone the project, open it in Xcode, uncomment each block of code in WindowController.swift and run. The numbers above each block correspond to each style below.

All code is in WindowController.swift in the windowDidLoad function. You should just be able to place each block inside that function to get the exact same result.

If you have a style to add, please make a pull request.

1. Hide title

Don't show the title text in the titlebar.

复制代码
window?.titleVisibility = .hidden

2. Hide titlebar

Hide the titlebar completely.

复制代码
window?.styleMask.remove(.titled)

3. Vibrant background

Create a vibrant background where whatever is behind the window can be slightly seen. This uses NSVisualEffectView.

复制代码
let visualEffect = NSVisualEffectView()
visualEffect.blendingMode = .behindWindow
visualEffect.state = .active
visualEffect.material = .dark
window?.contentView = visualEffect

visualEffect.material can take multiple values including:

  • .appearanceBased: based on the views appearance
  • .dark: dark appearance
  • .ultraDark: ultra dark appearance
  • .light: light appearance
  • .mediumLight: medium light appearance
  • others such as .menu, .popover, .selection, .sidebar and .titlebar

4. Vibrant background with transparent titlebar

Same as above, with a transparent titlebar.

复制代码
let visualEffect = NSVisualEffectView()
visualEffect.blendingMode = .behindWindow
visualEffect.state = .active
visualEffect.material = .dark
window?.contentView = visualEffect

window?.titlebarAppearsTransparent = true
window?.styleMask.insert(.fullSizeContentView)

5. Vibrant background without titlebar

Same as above, without the titlebar.

复制代码
let visualEffect = NSVisualEffectView()
visualEffect.blendingMode = .behindWindow
visualEffect.state = .active
visualEffect.material = .dark
window?.contentView = visualEffect

window?.styleMask.remove(.titled)
window?.isMovableByWindowBackground = true

6. Vibrant background with border radius and no titlebar

A vibrant window with a custom border radius. The border radius value can be changed at visualEffect.layer?.cornerRadius = 16.0.

复制代码
let visualEffect = NSVisualEffectView()
visualEffect.translatesAutoresizingMaskIntoConstraints = false
visualEffect.material = .dark
visualEffect.state = .active
visualEffect.wantsLayer = true
visualEffect.layer?.cornerRadius = 16.0

window?.titleVisibility = .hidden
window?.styleMask.remove(.titled)
window?.backgroundColor = .clear
window?.isMovableByWindowBackground = true

window?.contentView?.addSubview(visualEffect)

guard let constraints = window?.contentView else {
  return
}

visualEffect.leadingAnchor.constraint(equalTo: constraints.leadingAnchor).isActive = true
visualEffect.trailingAnchor.constraint(equalTo: constraints.trailingAnchor).isActive = true
visualEffect.topAnchor.constraint(equalTo: constraints.topAnchor).isActive = true
visualEffect.bottomAnchor.constraint(equalTo: constraints.bottomAnchor).isActive = true

7. Transparent titlebar

A window with a transparent titlebar.

复制代码
window?.titlebarAppearsTransparent = true

8. Transparent titlebar with background color

Same as above with a background color.

复制代码
window?.titlebarAppearsTransparent = true
window?.backgroundColor = .red

9. Toolbar

A window with a toolbar.

复制代码
let customToolbar = NSToolbar()
window?.titleVisibility = .hidden
window?.toolbar = customToolbar

10. Transparent toolbar

Same as above, with the toolbar transparent.

复制代码
let customToolbar = NSToolbar()
window?.titlebarAppearsTransparent = true
window?.titleVisibility = .hidden
window?.toolbar = customToolbar

11. Transparent toolbar without seperator

Same as above, without the toolbar seperator.

复制代码
let customToolbar = NSToolbar()
customToolbar.showsBaselineSeparator = false
window?.titlebarAppearsTransparent = true
window?.titleVisibility = .hidden
window?.toolbar = customToolbar

12. Transparent toolbar with background color and without seperator

Same as above, with a background color.

复制代码
let customToolbar = NSToolbar()
customToolbar.showsBaselineSeparator = false
window?.titlebarAppearsTransparent = true
window?.titleVisibility = .hidden
window?.backgroundColor = .red
window?.toolbar = customToolbar

13. Translucent toolbar

A translucent toolbar allowing for content behind the toolbar to be slightly seen.

复制代码
let customToolbar = NSToolbar()
window?.titleVisibility = .hidden
window?.styleMask.insert(.fullSizeContentView)
window?.contentView?.wantsLayer = true
window?.contentView?.layer?.contents = NSImage(named: NSImage.Name("Background"))
window?.toolbar = customToolbar

14. Translucent titlebar

Same as above with a titlebar instead of a toolbar.

复制代码
window?.titleVisibility = .hidden
window?.styleMask.insert(.fullSizeContentView)
window?.contentView?.wantsLayer = true
window?.contentView?.layer?.contents = NSImage(named: NSImage.Name("Background"))

15. Transparent titlebar without title

Same as above with a transparent titlebar.

复制代码
window?.titleVisibility = .hidden
window?.styleMask.insert(.fullSizeContentView)
window?.titlebarAppearsTransparent = true
window?.contentView?.wantsLayer = true
window?.contentView?.layer?.contents = NSImage(named: NSImage.Name("Background"))

16. macOS Mojave dark mode

The macOS Mojave dark mode appearance.

复制代码
if #available(OSX 10.14, *) {
  window?.appearance = NSAppearance(named: .darkAqua)
}
相关推荐
无意feel6 小时前
MacOS 安装neofetch cmatrix lolcat
macos·数字雨·彩虹特效
KevinShi_BJ8 小时前
MacOS 上安装 Docker 和启动 LangBot
macos
ricky_fan10 小时前
(25年12月)claude code报错:might not be available in your country
macos·bash
james bid10 小时前
MacBook Pro 2015 上 XUbuntu 24.04 启用 eGPU (GeForce GTX 1080 Ti) 和核显黑屏问题解决
linux·ubuntu·macos·cuda·egpu
私人珍藏库11 小时前
[Mac] Mac风扇控制软件 iFan V1.1.1
macos
腾讯云qcloud075511 小时前
腾讯位置商业授权iOS 轨迹SDK
macos·ios·cocoa
新手村领路人11 小时前
MacOS Tahoe26.1自制定时休眠app
macos
2501_9160074711 小时前
没有 Mac,如何在 Windows 上架 iOS 应用?一套可落地的工程方案
android·macos·ios·小程序·uni-app·iphone·webview
乐之者v1 天前
mac操作快捷键命令
macos
一步徐龙的浪1 天前
Scholaread Mac版更新后无法用手机验证码登录
macos·scholaread·靠岸学术