Gizmodo
Gizmodo

Reputation: 3202

Wrong Interface Orientation Reported in iOS 16

I have been using the following to detect the current interface orientation in iOS 14/15:

UIApplication.shared.windows.first!.windowScene!.interfaceOrientation 

Now in iOS 16 Beta (1 and 2), it is reporting incorrectly. Landscape is being reported as Portrait Upsidedown.

Upvotes: 5

Views: 6438

Answers (2)

JustForHelp
JustForHelp

Reputation: 21

I managed to deal with it in this way:

if (@available(iOS 16, *)) {
    float windowWidth = gameScene.view.window.frame.size.width;
    float windowHeight = gameScene.view.window.frame.size.height;
    
    if (windowWidth > windowHeight) {
        orientation = UIInterfaceOrientationLandscapeLeft;
    } else {
        orientation = UIInterfaceOrientationPortrait;
    }
} else {
    orientation = gameScene.view.window.windowScene.interfaceOrientation;
}

Upvotes: 0

Krishnarjun Banoth
Krishnarjun Banoth

Reputation: 1580

 if #available(iOS 16, *) {
        DispatchQueue.main.async {
            let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
            self.setNeedsUpdateOfSupportedInterfaceOrientations()
            self.navigationController?.setNeedsUpdateOfSupportedInterfaceOrientations()
            windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: .landscape)) { error in
                print(error)
                print(windowScene?.effectiveGeometry ?? "")
            }
        }
        
    } else {
        appDelegate.myOrientation = .landscape
        UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
        UIView.setAnimationsEnabled(true)
    }

Apple deprecated UIDevice orientation related api's in iOS_16 instead use requestGeometryUpdate method which requests an update to the window scenes geometry.

For detailed information kindly check the following apple developer documentation. requestGeometryUpdate

If you still not able to rotate the device successfully, kindly check the below link for possible root cause and the solution.

UISceneErrorDomain Code=101 issue and solution

Upvotes: 6

Related Questions