skip to Main Content

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.

2

Answers


  1.  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

    Login or Signup to reply.
  2. 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;
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search