SwiftUI for MacOS 窗口,带圆角,不带标题栏

Posted

技术标签:

【中文标题】SwiftUI for MacOS 窗口,带圆角,不带标题栏【英文标题】:SwiftUI for MacOS Window with Rounded Corners without Title Bar 【发布时间】:2020-07-20 12:33:12 【问题描述】:

我想在没有标题栏或小型化集的 NSWindow 上实现圆角半径。我必须重写 NSWindow 的 canBecomeKey 才能使窗口中的视图可选。

对于旧版本的 swift 或使用界面生成器但我使用的是 swiftUI 的用户,我已经看到了很多方法。

这是我的 NSWindow 覆盖:

class SWindow: NSWindow 
    override var canBecomeKey:Bool 
        return true
    

在应用代理中:

var searchWindow: SWindow!

let searchView = SearchView().cornerRadius(10)
searchWindow = SWindow(
    contentRect: NSRect(x: 0, y: 0, width: 850, height: 500),
    styleMask: [.resizable],
    backing: .buffered, defer: false)
searchWindow.center()
searchWindow.isReleasedWhenClosed = false
searchWindow.isMovableByWindowBackground = true
searchWindow.titlebarAppearsTransparent = true
searchWindow.isOpaque = false
searchWindow.contentView = NSHostingView(rootView: searchView)
searchWindow.makeKeyAndOrderFront(true)

添加 SearchView().cornerRadius(10) 似乎确实在视图上创建了一个角半径,但窗口仍然是方形的。

【问题讨论】:

【参考方案1】:

...在视图上创建一个圆角半径,但窗口仍然是方形的。

你需要移除窗口背景

window.backgroundColor = NSColor.clear

顺便说一句,添加完整的内容大小

searchWindow = SWindow(
    contentRect: NSRect(x: 0, y: 0, width: 850, height: 500),
    styleMask: [.resizable, .fullSizeContentView],
    backing: .buffered, defer: false)

【讨论】:

有效!我必须设置下一个子元素的背景颜色,但这很有效。感谢您今天的所有帮助:)

以上是关于SwiftUI for MacOS 窗口,带圆角,不带标题栏的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 如何在 macOS 上隐藏窗口标题

如何使用 SwiftUI 在 macOS 上可靠地检索窗口的背景颜色?

SwiftUI 2.0 在 macOS 上禁用窗口的缩放按钮

如何在 SwiftUI 中隐藏 macOS 中视图/窗口的状态栏?

基于文档的 MacOs 应用程序的 SwiftUI 窗口大小

macOS 应用程序的 SwiftUI:关闭窗口并打开另一个窗口时的用户 @EnvironmentObject