Mac催化剂-如何制作最小尺寸的窗口?

时间:2019-07-20 09:49:15

标签: macos ios13

Mac催化剂允许调整窗口大小,以任何方式为Mac催化剂应用程序提供最小窗口大小吗?

8 个答案:

答案 0 :(得分:3)

只需将以下代码块添加到您的application:didFinishLaunchingWithOptions方法中即可:

    UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
        windowScene.sizeRestrictions?.minimumSize = CGSize(width: 480, height: 640)
    }

PS:您还可以在此处设置maximumSize属性

答案 1 :(得分:2)

使用此方法实现Objective-C类:

 - (void)setMinimumSize:(CGSize)size {
     id app = NSClassFromString(@"NSApplication");
     id shared = [app valueForKeyPath:@"sharedApplication"];
     id mainWindow = [shared valueForKeyPath:@"mainWindow"];

     NSValue *nssize = [NSValue valueWithCGSize:size];
     [mainWindow setValue:nssize forKeyPath:@"minSize"];
 }

要从Swift调用-使用桥接头。

答案 2 :(得分:1)

使用sizeRestrictions?.minimumSizesizeRestrictions?.maximumSize为Mac应用程序窗口设置最小或最大大小。

打开您的SceneDelegate,然后:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
   guard let scene = (scene as? UIWindowScene) else { return }

   scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 600)
   scene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 600)
}

答案 3 :(得分:1)

在场景代表内部,您可以执行以下操作:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let scene = (scene as? UIWindowScene) else { return }

    #if targetEnvironment(macCatalyst)
        scene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
        scene.sizeRestrictions?.maximumSize = CGSize(width: 1280, height: 1200)
    #endif
}

答案 4 :(得分:0)

这是@marcelosalloum出色答案的扩展版本。

第1步。 打开 AppDelegate.swift

第2步。 找到 func application(),在此处插入您的@marcelosalloum代码版本(或像我一样调用为此创建的函数)。

第3步。 (可选)断言您的代码仅在具有适当Swift API的平台上运行(使用 #available


示例代码(在 AppDelegate.swift 中)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    addWindowSizeHandlerForMacOS()

    return true
}

func addWindowSizeHandlerForMacOS() {
    if #available(iOS 13.0, *) {
        UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
            windowScene.sizeRestrictions?.minimumSize = CGSize(width: 800, height: 1100)
            windowScene.sizeRestrictions?.maximumSize = CGSize(width: 800, height: 1100)
        }
    }
}

示例屏幕截图

在我的应用程序中,我从第23行开始定义了一个名为 addWindowSizeHandlerForMacOS()的函数。然后从 AppDelegate.swift < / em>(第18行)。

Xcode Screenshot

答案 5 :(得分:0)

@marcelosalloum答案的目标C版本:

for (UIScene* scene in UIApplication.sharedApplication.connectedScenes) {
    if ([scene isKindOfClass:[UIWindowScene class]]) {
        UIWindowScene* windowScene = (UIWindowScene*) scene;
        windowScene.sizeRestrictions.minimumSize = CGSizeMake(480, 640);
    }
}

答案 6 :(得分:0)

只需将其添加到场景委托中即可:

window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 900.0, height: 750.0)

我还添加了如何将最大大小设置为最大可能值:

window?.windowScene?.sizeRestrictions?.maximumSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)

答案 7 :(得分:0)

我做了一个小研究。因此,我在SceneDelegate的func场景中添加了以下内容:

  func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if UIDevice.current.systemName.contains("Mac") {
            window?.windowScene?.sizeRestrictions?.minimumSize = CGSize(width: 1024, height: 768)
        } else {
           // iOS - nothing to change
        }

我不确定是否需要系统名称子句,因为iOS的window.windowScene.sizeRestrictoins为nil,但是为了清楚理解和将来的更新而添加了它。

我选择1024x768作为最小的iPad横向尺寸(Catalyst将设备报告为横向模式为Mac OS的iPad)