【Swift】Appleシリコン搭載のMacで公開するiOSアプリの、Mac上でのウインドウサイズ設定

iOSアプリはAppleシリコン搭載のMacで動作可能なので、多くのiOSアプリはMac App Storeで配信されています。
そしてMac App Storeで配信されているiOSアプリのほとんどは、Macでの動作を考慮して作られていると思います。

iOSアプリをMacで動作を考慮して変更する箇所はアプリの内容次第です。何も変更する必要がないアプリもあると思います。

この記事では、iOSアプリをMacで動かした場合のウインドウサイズの設定方法をご紹介します。
Storyboardにおいての設定方法です。

目次

サイズを設定しない場合の、Mac上でのウインドウサイズ

何も設定しない場合のウインドウサイズは669×415(幅669ポイント、高さ415ポイント。タイトルバーを除く)です。
サイズ可変のウインドウです。

Mac上での固定ウインドウサイズ設定

次のコードをAppDelegate.swiftのfunc applicationに書きます。
この例での固定ウインドウサイズは475×769です。
minimumSizeはmaximumSizeより1ポイント小さい値とします。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

      UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
          windowScene.sizeRestrictions?.minimumSize = CGSize(width: 474, height: 768)
          windowScene.sizeRestrictions?.maximumSize = CGSize(width: 475, height: 769)
      }

        return true
}

Mac上での可変ウインドウサイズ設定

minimumSizeとmaximumSizeの数値を離して設定すれば、可変ウインドウになります。

しかし設定値はクセが強いです。
最小ウインドウサイズはminimumSizeの設定値より1ポイント大きい値になります。
最大ウインドウサイズはmaximumSizeの設定値です。

この例では最小ウインドウサイズ475×769、最大ウインドウサイズ575×869です。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

      UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
          windowScene.sizeRestrictions?.minimumSize = CGSize(width: 474, height: 768)
          windowScene.sizeRestrictions?.maximumSize = CGSize(width: 575, height: 869)
      }

        return true
}

コードを書いても、Mac上のウインドウが変わらない場合

間違いなく書いたのにMac上のウインドウに変化がない。。。

変わらない場合、SceneDelegate.swiftがあるか確認します。

SceneDelegate.swiftがあれば、AppDelegate.swift内に書いたコードは消して、SceneDelegate.swiftのfunc sceneにコードを書きます。するとMac上のウインドウが変わります。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

      UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
          windowScene.sizeRestrictions?.minimumSize = CGSize(width: 474, height: 768)
          windowScene.sizeRestrictions?.maximumSize = CGSize(width: 575, height: 869)
      }

      guard let _ = (scene as? UIWindowScene) else { return }
}

コメント

コメントする

CAPTCHA


目次