isMovableByWindowBackground для SwiftUI MacCatalyst
Как мне получить доступ к атрибутам из NSWindow для приложения SwiftUI Catalyst? Например, разрешение перемещения окна путем перетаскивания его фона через NSWindow.moveableByWindowBackground.
Я уточняю основы уже в SceneDelegate.swift.
import UIKit
import SwiftUI
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let app = UIApplication.shared
let delegate = app.delegate as! AppDelegate
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
#if targetEnvironment(macCatalyst)
if let titlebar = windowScene.titlebar {
titlebar.titleVisibility = .hidden
titlebar.toolbar = nil
}
if let sizeRestrictions = windowScene.sizeRestrictions {
sizeRestrictions.minimumSize = CGSize(width: 1300, height: 800)
}
window.canResizeToFitContent = true
#endif
window.rootViewController = UIHostingController(rootView: GreatHallView(screenerVM: delegate.screenerVM).environmentObject(SortingHat()))
self.window = window
window.makeKeyAndVisible()
}
}
1 ответ
Решение
Во-первых, вам понадобится динамическая библиотека от Mhd Hejazi. Его можно включить в ваш код с помощью SPM.
Затем расширение UIWindow:
extension UIWindow {
var nsWindow: NSObject? {
Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(self)
}
}
Теперь вы можете связать NSWindow с UIWindow и вызывать методы и извлекать свойства следующим образом:
#if targetEnvironment(macCatalyst)
let ns = window.nsWindow
let frame = Dynamic(ns!).frame.asCGRect!
let size = frame.size
Dynamic(ns!).setAspectRatio(CGSize(1.0, size.height/size.width))
print(Dynamic(ns!).isMovableByWindowBackground.asBool!)
Dynamic(ns!).setMovableByWindowBackground(true)
print(Dynamic(ns!).isMovableByWindowBackground.asBool!)
#endif
Не забудьте, что для импорта потребовались динамические. Также используйте методы и свойства Object-C, а не Swift.