use*_*ser 12 macos swift swiftui
我正在开发一个项目,用于删除最大化、最小化和关闭按钮,我们可以在SwiftUI 生命周期中使用 Xcode for macOS构建的每个应用程序/项目的每个窗口中看到这些按钮。我怎么能这样做呢?
PS:请考虑我正在SwiftUI 生命周期/macOS上进行编码,如果您的代码或方式与其不兼容,那么我将无法使用它。感谢您的帮助和您的时间。
更新,日期 2022 年 3 月 5 日: 问题仍然悬而未决,正在寻找 SwiftUI 方法。您可以使用 SwiftUI api 来回答这个问题。
shu*_*ngb 11
当我自己想做类似的事情时遇到了这个问题,所以我想我应该为后代添加答案 - 或者至少在苹果决定让 SwiftUI 在 macOS 上很好地工作之前。
不管怎样,诀窍是获取保存 SwiftUI 视图的窗口,然后对其进行调整。最简单的方法似乎是监听 的NSApplication,didBecomeActiveNotification然后从 中获取参考NSApplication.shared mainWindow,keyWindow(或者可能通过标题将其过滤掉windows),因为最适合相关应用程序。
mainWindow用于helloWorld 程序的示例...
struct ContentView: View {
var body: some View {
Text("Hello, world!")
.padding()
.frame(minWidth: 200, minHeight: 200)
.navigationTitle("Undecorated")
.onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification), perform: { _ in
NSApp.mainWindow?.standardWindowButton(.zoomButton)?.isHidden = true
NSApp.mainWindow?.standardWindowButton(.closeButton)?.isHidden = true
NSApp.mainWindow?.standardWindowButton(.miniaturizeButton)?.isHidden = true
})
}
}
Run Code Online (Sandbox Code Playgroud)
笔记
尽管按钮已从窗口中消失,但值得注意的是,用于最大化、隐藏和终止窗口的菜单项和热键仍然完全可用。该功能必须与自定义窗口外观分开删除。
我见过的获取窗口的替代方法是向使用 AppKit 创建窗口的 UI 添加一个虚拟的“查找我的窗口”类型视图,并在执行此操作时获取对窗口的引用。LostMoa 的博客上对这种方法进行了很好的阐述。
如果有人发现更好的东西,我会非常感兴趣。