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

agxfikkp  于 2022-12-01  发布在  iOS
关注(0)|答案(2)|浏览(260)

我有一个iOS应用程序,我已经启用了Catalyst。应用程序中的一个功能打开了一个新窗口。默认情况下,这个窗口打开得很大,但我需要一种方法来使它在默认情况下变小。我知道你可以设置windowScene.sizeRestrictions?.minimumSize.maximumSize,但这会将窗口限制在我喜欢的大小。我想使它打开一定大小的窗口,比如默认情况下为500x800。但是用户可以将其扩展到他们想要的任何内容。
我在SceneDelegate中试过window?.frame = CGRect(origin: .zero, size: CGSize(width: 500, height: 800)),但没有效果。
视觉示例:

kqlmhetl

kqlmhetl1#

解决了这个问题,所以我会在以后帮助任何人解决这个问题。设置你的.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)
        }
    }
w6lpcovy

w6lpcovy2#

按照迪伦的建议

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
}

就是这么简单。

相关问题