【问题标题】:Beginner stuck with a problem with NSScreen.screens初学者遇到了 NSScreen.screens 的问题
【发布时间】:2021-05-13 19:18:33
【问题描述】:

我是 swift 的初学者,我正在为自己的项目学习。现在,我正在尝试制作一个“信息亭模式”窗口,该窗口最大化以填充整个屏幕,同时隐藏菜单栏和停靠栏,因此无法退出应用程序(顺便说一下,这是一个拖延应用程序)。但是,在一切正常之后,我遇到了一个问题,因为菜单栏占用的空间现在有一个我需要填补的空白 (see pic)。由于这个差距,用户可以单击差距并退出我试图阻止的应用程序。我在这里做了很多搜索,但我找不到解决方案,我非常感谢我能得到的任何帮助。

注意:我正在使用 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)

    }

}

【问题讨论】:

标签: swift macos cocoa swift4


【解决方案1】:

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,这样您就不必隐藏菜单栏和所有这些东西,但您不必这样做。

【讨论】:

  • 非常感谢!差距现在已修复,但如果您不介意将我指向正确的方向,我实际上遇到了您的解决方案的另一个问题。我注意到现在可以“点击”窗口(不确定这是否是正确的术语),并且可以单击我的窗口(或查找器)后面的任何应用程序,然后可以从那里强制退出该应用程序。你知道我该如何解决这个问题吗?
  • 我找到了一个选项:window.styleMask = []
  • 你也可以省略window?.styleMask.remove(.titled)
猜你喜欢
  • 2014-09-28
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多