iPhone Duo: Keep app on inner display while hinge is open (like Clock)?

I'm building a night-light app for iPhone Duo. When the device is partly open in tent mode, the lamp starts on the inner display. As soon as I set the phone down on a table, the system moves my window to the outer display, even though the hinge stays open.

Apple's Clock app stays on the inner display in the same pose, so it seems possible at the system level.

Steps

  1. Open iPhone Duo to ~80° (tent).
  2. Launch the app on the inner display.
  3. Set the device down on a table.

Observed (logged from the app)

  • UIHinge.status stays .partiallyOpen (~80°), not .closed.
  • UIDevice.orientation goes portraitUpsideDown → faceDown → landscapeRight.
  • UIScreen.didDisconnectNotification fires and UIScreen.screens drops the inner screen.
  • The window moves to the outer screen (466×678).

What I've tried

  • Restricting UISupportedInterfaceOrientations to portrait only
  • Turning on Rotation Lock
  • Reading UIHingeInteraction (read-only, no effect on display routing)
  • Looking at UISceneAccessory.cameraCapture, which only applies with an active capture session and a fully open device

Question
Is there a supported way for a scene to prefer or stay on the inner display while the hinge isn't closed? If not, I'll file a Feedback Assistant request.

iPhone Duo · iOS 27.2 · Xcode 27.2

Thanks for the very interesting post.

I believe there are set modes for positions like when the system detect the device settling into a tent/tabletop orientation where the outer cover display faces a usable viewing angle and the inner display are angled downward toward the surface (portraitUpsideDown → faceDown → landscapeRight).

UIHinge is for information only and does not provide scene routing preferences or display locks, but you can get the angle of the Hinge using the onHingeChange for example like:

VStack(spacing: 12) {
            if let hinge {
                Text("\(hinge.angle.degrees, format: .number.precision(.fractionLength(1)))°")
                    .font(.system(size: 72, weight: .bold, design: .rounded))
                    .monospacedDigit()
                    .contentTransition(.numericText())
  
                     // check for hinge.status == .partiallyOpen here?
                     Text("Status \(hinge.status)")

                Text(String(describing: hinge.status).capitalized)
                    .font(.title3)
                    .foregroundStyle(.secondary)
            } else {
                ContentUnavailableView(
                    "Hinge Unavailable",
                    systemImage: "rectangle.split.2x1",
                    description: Text("Run on iPhone Duo and fold the device to see the angle.")
                )
            }
        }
        .padding()
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        // Called in real time as the hinge angle or status changes.
        .onHingeChange { _, newContext in
            hinge = newContext.hinge
        }

Also isIdleTimerDisabled will prevent the active display from sleeping due to touch inactivity, but does not prevent posture-driven display switching.

I may have a suggestion but I have not tried it myself, however there are engineers here that probably have played with the UIHinge and can provide better suggestions. Using onHingeChange check the hinge.status alongside windowScene.screen geometry changes. So while hinge.status == .partiallyOpen, automatically change brightness/fill on the outer display so the tented outer screen still functions as a directional bedside lamp? or display a prompt letting the user know that opening the hinge past the tent threshold as you have the hinge.angle.degrees?

When the open screen turns off the front screen is on and you can see the degrees and status. The code above will help you.

Hope this helps. Looking forward to what you develop.

Albert  WWDR