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 }
}
コメント