Status bar is Landscape, but [[UIApplication sharedApplication] statusBarOrientation] returns portrait

前端 未结 5 2201
粉色の甜心
粉色の甜心 2020-12-13 05:19

This problem appears to be intermittent, but I am not sure why exactly. When running my application on the device (iPad), I have some code to load a scroll view with some im

5条回答
  •  悲&欢浪女
    2020-12-13 05:22

    OK Fixed.

    Using UINavigationController, when I popToViewController:animated: from a landscape view to a portrait view, the destination view appears correct but the status bar and also the UIKeyboard keeps the landscape configuration, making a real mess.

    Working around After thousands of recommendations about statusBarOrientation and references read... https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html

    "The setStatusBarOrientation:animated: method is not deprecated outright. It now works only if the supportedInterfaceOrientations method of the top-most full-screen view controller returns 0. This makes the caller responsible for ensuring that the status bar orientation is consistent." (thanks to Vytis in here)

    statusBarOrientation only works if supportedInterfaceOrientations returns 0, so... that give us a guess.

    If statusBarOrientation is not as expected, one zero return will do it (if always return 0, the view wont rotate, so:

    // if deviceOrientation is A (so I expect statusbarOrientation A
    // but statusbarOrientation is B
    // return 0
    // otherwise 
    // return user interface orientation for A
    
    - (NSUInteger)supportedInterfaceOrientations {
        UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
        UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;
        if(deviceOrientation == UIDeviceOrientationPortrait || deviceOrientation == UIDeviceOrientationPortraitUpsideDown){
            if(statusBarOrientation != UIInterfaceOrientationPortrait ||statusBarOrientation != UIInterfaceOrientationPortraitUpsideDown){
                 return 0;
            }
        }
        // otherwise
        return UIInterfaceOrientationMaskPortrait;
    }
    

    Now, in viewDidAppear (believe me, I use this call even when the keyboard notification is recived:

    [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;
    

    more than 48 labor hrs in this. Hope this helps a while, thanks to all.

提交回复
热议问题