swiftui - 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)似乎确实在视图上创建了一个角半径,但窗口仍然是方形的。
解决方案
...在视图上创建一个角半径,但窗口仍然是方形的。
您需要删除窗口背景
window.backgroundColor = NSColor.clear
而且,顺便说一句,添加完整的内容大小
searchWindow = SWindow(
contentRect: NSRect(x: 0, y: 0, width: 850, height: 500),
styleMask: [.resizable, .fullSizeContentView],
backing: .buffered, defer: false)
推荐阅读
- tensorflow - TensforflowJS nodejs binding, unable to set custom optimzer
- go - Golang mongo-go-driver Beta 1 , using greater than operator
- angular6 - How to use geohash in Angular 6
- angular - RadListView ng-模板被忽略
- ios - Flutter 在启动时检查应用程序是否在内存中(如何检查启动画面是否在 iOS 中显示)
- docker - 添加 Rancher 主机并使其保持活动状态时遇到问题
- uwp - 从 UMDF 驱动程序访问相机和渲染器
- kubernetes - 如何将安装在 K8 集群上的 Consul 代理注册到外部 Consul 服务器(非 k8 集群)。
- excel - Excel VBA 在大型数据集中定义特定范围
- c++ - 如何通过以前存储的 ID 从 struct 对象中检索值?C++