macOS SwiftUI,内容不填充没有标题栏的 NSWindow
Posted
技术标签:
【中文标题】macOS SwiftUI,内容不填充没有标题栏的 NSWindow【英文标题】:macOS SwiftUI, content does not fill NSWindow without titlebar 【发布时间】:2022-01-13 09:22:40 【问题描述】:我正在尝试创建一个自定义 NSWindow,我希望我的内容完全填充可用空间,我设法隐藏导航栏按钮和标题并使其透明,但是当我设置内容以填充可用空间时space 底部有一些空间不工作
我创建窗口的方式:
private func createWindow() -> MyWindow
let window = MyWindow(
contentRect: NSRect(x: 0, y: 0, width: 10, height: 10), // these values don't matter, the window expands to the swiftUI view
styleMask: [.titled, .closable, .fullSizeContentView],
backing: .buffered, defer: false)
window.titlebarAppearsTransparent = true
window.titleVisibility = .hidden
window.isMovableByWindowBackground = false
window.isReleasedWhenClosed = false
window.collectionBehavior = [.transient, .ignoresCycle]
window.standardWindowButton(.closeButton)?.isHidden = true
window.standardWindowButton(.zoomButton)?.isHidden = true
window.standardWindowButton(.miniaturizeButton)?.isHidden = true
return window
在我的组件上,我添加了以下属性:
.ignoresSafeArea()
我已经遵循了question 中的所有建议,但似乎对我的情况没有任何帮助,感谢任何帮助
【问题讨论】:
在这里工作正常 - Xcode 13.1 / macOS 12.0.1。您放置在此窗口中的 SwiftUI 视图可能存在一些问题(或者您的MyWindow
,因为我使用 NSWindow
进行了测试)。
我尝试了另一个非常简单的SwiftUI,只有一个文本和一个背景颜色,行为仍然相同,底部有一些空间没有正确填充:(
也用纯 NSWindow 试过了,还是不行
@Asperi 也许您可以提供一个运行示例?
@OscarFranco:你的代码中的 MyWindow 是什么?
【参考方案1】:
看来我已经复制了你可能拥有的内容
window.contentView =
NSHostingView(rootView:
Rectangle().fill(Color.red)
.ignoresSafeArea() // << works !!
.frame(width: 640, height: 480)
// .ignoresSafeArea() // << issue when here !!
)
更多发现:即使在最后使用ignoresSafeArea
时使用最小 W/H 而不是严格的窗口框架也没有问题,即。
.frame(minWidth: 640, minHeight: 480)
.ignoresSafeArea()
【讨论】:
奇怪...不适合我(使用 VStack 和内部文本)...是否也因为我在自己的文件中使用了真正的 swiftUI 结构? 我对此表示怀疑。问题出在ignoresSafeArea
修饰符上。
嗯...我刚刚尝试使用 VStack 和背景,似乎绘制背景是失败的事情? VStack Rectangle().fill(Color.red) .frame(width: 200, height: 200) .ignoresSafeArea() //
查看更新的部分 - 经过测试,它甚至可以在末尾使用 .background。
在 VStack 上仍然不适合我,但如果我使用 ZStack 并手动绘制矩形作为背景,它确实可以工作以上是关于macOS SwiftUI,内容不填充没有标题栏的 NSWindow的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Mac OS 中的 SwiftUI 列表中删除底部/顶部项目填充
如何使用 SwiftUI 在 UICollectionViewCell 中填充内容
SwiftUI:WKWebView 在 macOS 上截断页面内容(NSViewRepresentable)