swift - 初学者遇到了 NSScreen.screens 的问题
问题描述
我是 swift 的初学者,我正在为自己的项目学习。现在,我正在尝试制作一个“信息亭模式”窗口,该窗口最大化以填充整个屏幕,同时隐藏菜单栏和停靠栏,因此无法退出应用程序(顺便说一下,这是一个拖延应用程序)。但是,在一切正常之后,我遇到了一个问题,因为菜单栏占用的空间现在有一个我需要填补的空白(见图)。由于这个差距,用户可以点击差距并退出我试图阻止的应用程序。我在这里做了很多搜索,但我找不到解决方案,我非常感谢我能得到的任何帮助。
注意:我正在使用 Swift 4.1 和 Xcode 9.4.1
import Cocoa
typealias NSRect = CGRect
class MainWindowController: NSWindowController {
convenience init() {
self.init(windowNibName: NSNib.Name(rawValue: "MainWindowController"))
}
override func windowDidLoad() {
super.windowDidLoad()
NSMenu.setMenuBarVisible(false)
NSApp.presentationOptions = [.hideDock, .hideMenuBar, .disableForceQuit, .disableProcessSwitching,.autoHideToolbar]
window?.backgroundColor = NSColor(red: 1, green: 0, blue: 0, alpha: 0.754)
window?.isOpaque = false
window?.setFrame(NSScreen.screens[0].frame, display: true, animate: false)
window?.styleMask.remove(.titled)
}
}
解决方案
windowDidLoad 函数的改进版本如下所示:
override func windowDidLoad() {
super.windowDidLoad()
NSMenu.setMenuBarVisible(false)
NSApp.presentationOptions = [.hideDock, .hideMenuBar, .disableForceQuit, .disableProcessSwitching]
window?.backgroundColor = NSColor(red: 1, green: 0, blue: 0, alpha: 0.754)
window?.isOpaque = false
window?.styleMask.remove(.titled)
window?.setFrame(NSScreen.screens[0].frame, display: true, animate: false)
}
您需要在设置框架之前删除窗口标题栏,因为标题栏存在直到您隐藏它。此外,您可能不需要自动隐藏工具栏。
我会用 替换您的演示选项window?.level = .mainMenu + 1
,然后您不必隐藏菜单栏和所有这些东西,但您不必这样做。
推荐阅读
- android - 如何避免在改造 2 中的 OkHttpClient 中写入计时器重置
- windows - 如何将文件名传递给内核模式驱动程序?
- python-3.x - 如何在 JupyterLab 中安全地停止无限循环?
- java - 实现基本 dao,我得到错误参数类型必须是用 @Entity 注释的类或其集合/数组
- apache-spark - HDFS vs HDFS with YARN,如果我使用spark,我可以进行新的资源管理吗?
- visual-studio-code - 如何在 Visual Studio Code 中抑制集成终端上的信息
- create-react-app - 如何使用 TSLint 查看反应脚本 ESLint 错误
- android - 为音乐应用程序制作循环播放按钮时出现问题
- c# - 如何检测事件引用泄漏
- inheritance - 在多级层次结构的情况下,杰克逊 jsonsubtypes 字段不绑定