首页 > 解决方案 > SwiftUI for MacOS 窗口,带圆角,不带标题栏

问题描述

我想在没有标题栏或小型化集的 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)似乎确实在视图上创建了一个角半径,但窗口仍然是方形的。

标签: swiftuinswindowcornerradius

解决方案


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

您需要删除窗口背景

window.backgroundColor = NSColor.clear

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

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

推荐阅读