viewWillAppear上statusBarOrientation的值错误

时间:2012-06-11 14:11:11

标签: ios uiinterfaceorientation viewwillappear uistatusbar

我需要根据方向更改视图的图像背景。为此,我在viewWillAppear中使用statusBarOrientation方法:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    if (UIInterfaceOrientationIsPortrait(currentOrientation)) {
        NSLog(@"PORTRAIT");
    } else if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
        NSLog(@"LANDSCAPE");
    }   
}

问题是,即使iPad处于横向模式,控制台也始终显示PORTRAIT。 viewDidAppear中的相同代码正常工作,但为时已晚,用户可以看到图像的更改。这让我觉得statusBarOrientation的正确状态在viewWillAppear中仍然不可用,但我在其他一些问题中已经读过这段代码应该在那里工作。

3 个答案:

答案 0 :(得分:12)

尝试

int type = [[UIDevice currentDevice] orientation];
    if (type == 1) {
        NSLog(@"portrait default");
    }else if(type ==2){
        NSLog(@"portrait upside");
    }else if(type ==3){
        NSLog(@"Landscape right");
    }else if(type ==4){
        NSLog(@"Landscape left");
    }

答案 1 :(得分:3)

您不应该使用statusBarOrientation来确定应用程序的当前方向。根据Apple的文档:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html

  

此属性的值是一个常量,表示接收者状态栏的方向。有关详细信息,请参阅UIInterfaceOrientation。设置此属性会将状态栏旋转到指定的方向,而不会设置过渡动画。但是,如果您的应用程序具有可旋转的窗口内容,则不应使用此方法任意设置状态栏方向。如果设备更改方向,则此方法设置的状态栏方向不会更改。

尝试使用UIViewController的 interfaceOrientation 属性来获取当前应用程序的方向。

答案 2 :(得分:0)

以下是用于记录设备的interfaceOrientation的有用代码段:

NSArray* orientations = @[ @"nothing", @"UIInterfaceOrientationPortrait", @"UIInterfaceOrientationPortraitUpsideDown", @"UIInterfaceOrientationLandscapeLeft", @"UIInterfaceOrientationLandscapeRight”];
NSLog(@"Current orientation := %@", orientations[self.interfaceOrientation]);

希望这可以帮助别人!