Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to lock orientation in portrait for an iPhone SwiftUI app running on iPad?

I have a SwiftUI iPhone-only app with its orientation locked in portrait, which works great. However, when the same app is run on an iPad (in emulation mode; iPad is not a target) the lock has no effect: the UI rotates with the device, which is unintended as it breaks the UI. It fails in the simulator and on an actual device.

I can reproduce this issue using an empty SwiftUI project with only a single view:

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
    }
}

iPhone works as expected:

iPhone in portrait mode iPhone in landscape mode

iPad does not respect orientation lock:

iPad in portrait mode iPad in landscape mode

I have the following in my Info.plist, but no success. The UI still rotates on the iPad.

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

Then I defined an AppDelegate. Still no success, the UI keeps rotating on the iPad.

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.portrait
    }
}

@main
struct orientationApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

What is interesting:

  • When I enable iPad as a target the orientation lock works out of the box. However, I do not want to offer the app for the iPad. I just want to fix the UI for users who deliberately install iPhone apps on their iPad.
  • When I test the AppDelegate approach on an iPhone it works even if I allow all device orientations in Info.plist, so it seems to do the right thing (just not on the iPad).

I'm using Xcode 12.5 and Swift 5.

like image 843
Dominik Avatar asked Oct 25 '25 18:10

Dominik


1 Answers

enter image description here

Unticking Supports multiple windows solved the problem for me

like image 144
i4guar Avatar answered Oct 28 '25 08:10

i4guar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!