swift - 在 Swift 4 中创建类似 Spotlight 的窗口?
问题描述
我想创建一个窗口作为我的应用程序的一部分,该窗口在按下某个按键后显示一个类似 Spotlight 的窗口。
但我得到的只是隐藏title
:
override func viewWillAppear() {
self.view.window?.titleVisibility = .hidden
self.view.window?.titlebarAppearsTransparent = true
self.view.window?.styleMask.insert(.fullSizeContentView)
}
结果是:
如何使用 Xcode 10 和 Swift 创建这样的视图?
解决方案
您可以使用 NSPanel 创建自定义窗口
final class Panel: NSPanel {
init(contentRect: NSRect, backing: NSWindow.BackingStoreType, defer flag: Bool) {
super.init(contentRect: contentRect, styleMask: [.titled, .resizable, .closable, .fullSizeContentView], backing: backing, defer: flag)
self.isFloatingPanel = true
self.level = .floating
self.collectionBehavior.insert(.fullScreenAuxiliary)
self.titleVisibility = .hidden
self.titlebarAppearsTransparent = true
self.isMovableByWindowBackground = true
self.isReleasedWhenClosed = false
self.standardWindowButton(.closeButton)?.isHidden = true
self.standardWindowButton(.miniaturizeButton)?.isHidden = true
self.standardWindowButton(.zoomButton)?.isHidden = true
}
// `canBecomeKey` and `canBecomeMain` are required so that text inputs inside the panel can receive focus
override var canBecomeKey: Bool {
return true
}
override var canBecomeMain: Bool {
return true
}
}
并AppDelegate
像这样使用它:
final class AppDelegate: NSObject, NSApplicationDelegate {
lazy var panel: NSPanel = FloatingPanel(
contentRect: NSRect(x: 0, y: 0, width: 700, height: 320),
backing: .buffered,
defer: false
)
func applicationDidFinishLaunching(_ aNotification: Notification) {
// panel.contentView = ...
panel.makeKeyAndOrderFront(nil)
panel.center()
}
}
推荐阅读
- python - 安装 ipykernel 后 Jupyter Notebook 内核错误
- algorithm - 关注快速排序的空间复杂度
- python - 逐项计算的舍入规则
- r - 如何进行多列之间的偏相关分析并由多个协变量控制?
- swiftui - SwiftUI 使用 SegmentedPickerStyle 在 Picker 中自定义字体大小
- angular - 在 Popover 中禁用 DatePicker 的 onClick
- audio - 从 wav 转换为 mp3 后上传音频 blob
- here-api - HERE sdk Lite edition for android autosuggest return PARSING_ERROR
- visual-studio-code - VS Code 在任何窗口/菜单中向上/向下跳转 x 行
- awk - 使用 AWK 进行分组 | COL1 和 COL3