首页 > 解决方案 > 我可以访问托管 SwiftUI 场景的窗口的属性吗

问题描述

我想将一个窗口移动到 Mac 桌面上的特定位置。有没有办法访问和操作这个视图的属性?这将是 SwiftUI 创建的用于保存场景的窗口。

标签: macosswiftui

解决方案


根据上面的@asperi 评论,我能够提炼出解决方案。

import SwiftUI

struct ContentView: View {
    
    @State var theWindow: NSWindow?
    
    var body: some View {
        Text("Window Access")
            .frame(width: 400, height: 100, alignment: .center)
            .padding()
            .background(WindowAccessor(window: $theWindow))
            .onTapGesture {
                theWindow!.setFrameTopLeftPoint(NSPoint(x: 500, y: 800))
            }
    }
}

struct WindowAccessor: NSViewRepresentable {
    @Binding var window: NSWindow?

    func makeNSView(context: Context) -> NSView {
        let view = NSView()
        DispatchQueue.main.async {
            self.window = view.window   // << right after inserted in window
        }
        return view
    }

    func updateNSView(_ nsView: NSView, context: Context) {}
}

推荐阅读