繁体   English   中英

如何为 Mac Catalyst 应用程序设置默认/首选窗口大小?

[英]How to set a default/preferred window size for a Mac Catalyst app?

我有一个启用了 Catalyst 的 iOS 应用程序。 应用程序中的一项功能会打开一个新窗口。 默认情况下,此窗口打开得非常大,但我需要一种方法使其默认变小。 我知道您可以设置windowScene.sizeRestrictions?.minimumSize.maximumSize ,但这会将窗口限制为我喜欢的大小。 我想让它打开一个特定大小的窗口,默认为500x800 ,但用户可以将其扩展为他们想要的任何大小。

我在 SceneDelegate 中尝试过window?.frame = CGRect(origin: .zero, size: CGSize(width: 500, height: 800)) SceneDelegate但没有效果。

视觉示例: 显示我的目标窗口大小与默认窗口大小的图像

想通了,所以我将来会帮助任何人解决这个问题。 .maximumSize设置为首选尺寸。 然后在设置窗口后,使用DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {再次设置.maximumSize ,但这一次你想要的实际最大窗口大小。

我的完整代码:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        #if targetEnvironment(macCatalyst)
        let toolbarDelegate = NewSchoolworkToolbar()
        let toolbar = NSToolbar(identifier: "main")
        windowScene.title = "New Schoolwork"
        if let titlebar = windowScene.titlebar {
            titlebar.toolbar = toolbar
            titlebar.toolbarStyle = .unified
            titlebar.separatorStyle = .shadow
        }
        #endif
        
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            let newClassworkView = NewClassworkTableViewController()
            
            
            windowScene.sizeRestrictions?.minimumSize = CGSize(width: 400, height: 500)
            // This will be your "preferred size"
            windowScene.sizeRestrictions?.maximumSize = CGSize(width: 500, height: 800)
            
            window.rootViewController = newClassworkView
            self.window = window
            window.makeKeyAndVisible()
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            // This will be your actual size.
            windowScene.sizeRestrictions?.maximumSize = CGSize(width: 9000, height: 9000)
        }
    }

按照迪伦的绝妙秘诀,

func tidyCatalystWindow() {
    #if targetEnvironment(macCatalyst)
    UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }
     .forEach { ws in
        ws.sizeRestrictions?.minimumSize = CGSize(width: 500, height:800)
        ws.sizeRestrictions?.maximumSize = CGSize(width: 500, height: 800)
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            ws.sizeRestrictions?.maximumSize = CGSize(width: 9000, height: 9000)
        }
    }
    #endif
}

就这么容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM