【发布时间】:2021-03-30 10:07:54
【问题描述】:
将xcode 12.3 和swift 5.3 与SwiftUI App 生命周期一起使用来构建macOS 应用程序,访问和更改NSWindow 的外观和行为的最佳方法是什么?
编辑:我真正追求的是NSWindow 实例。
我添加了一个AppDelegate,但据我了解,NSWindow 可能是nil,因此无法修改,只需在此处创建一个类似于AppKit App Delegate 的生命周期方法会导致启动时出现两个窗口。
一种解决方案是阻止默认窗口出现,并将其全部留给applicationDidFinishLaunching 方法,但不确定这是否可行或合理。
WindowStyle 协议看起来是一个可能的解决方案,但不确定如何在现阶段通过CustomWindowStyle 最好地利用它,以及是否提供对NSWindow 实例的访问以进行细粒度控制。
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// In AppKit simply create the NSWindow and modify style.
// In SwiftUI creating an NSWindow and styling results in 2 windows,
// one styled and the other default.
}
}
@main
struct testApp: App {
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate : AppDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
【问题讨论】:
-
给它分配一个 NSAppearance?参见例如developer.apple.com/documentation/appkit/…
-
感谢您的建议,尽管我认为 NSAppearance 不足以涵盖我的用例,因为我需要控制 NSWindow 行为的其他方面。我将编辑我的问题,使这一要求更加明显。
-
现在正在尝试做同样的事情。在 Google 上严重缺乏这方面的知识。这里的符合类型似乎也不适合我 - developer.apple.com/documentation/swiftui/windowstyle
-
是的,我希望有更多关于符合类型以及如何通过实现
WindowStyle协议来实现类似的内容,但还没有找到任何东西,虽然我已经能够使用文档中定义的那些,即HiddenTitleBarWindowStyle工作得很好,但我需要自己的实现来实现我所追求的。
标签: ios swift macos swiftui nswindow