iPad shows at portrait but thinks it's landsca

2019-08-31 17:29发布

My Storybuilder is designed with a portrait layout. When I start the app with my iPad already turned to horizontal, it's able to correctly detect it's in a horizontal position. But when I start the app with my iPad in a portrait position, it thinks it's in horizontal. However, every time I rotate it, the code is able to detect the correct orientation properly.

- (void) viewDidLoad
{
    [self updateForOrientation];
}

- (void)updateForOrientation
{
    if (UIInterfaceOrientationIsPortrait([[UIDevice currentDevice] orientation])) // became portrait
    {
        NSLog(@"is portrait");
        //code for changing layout to portrait position
    }

    else //became horiztontal
    {
        NSLog(@"is horizontal");
        //code for changing layout to horizontal position
    }
}

Output: is horizontal (this is the output whether it starts up as portrait or landscape)

1条回答
时光不老,我们不散
2楼-- · 2019-08-31 17:51

The problem is that you're sending the devices orientation in terms of the UIDeviceOrientation enum to a function that's expecting a UIInterfaceOrientation value.

If you command click on UIInterfaceOrientationIsPortrait(), you can see that it is defined as follows.

#define UIInterfaceOrientationIsPortrait(orientation)  ((orientation) == UIInterfaceOrientationPortrait || (orientation) == UIInterfaceOrientationPortraitUpsideDown)

And if you look at the enum declarations for the two orientation types (documentation links below), you can see that there is a misalignment in value due to the device orientation containing a value for "none". Anyway, changing your code to use UIInterfaceOrientation should sort this out. Example:

- (void)updateForOrientation
{
    UIInterfaceOrientation currentOrientation = self.interfaceOrientation;

    if (UIInterfaceOrientationIsPortrait(currentOrientation)) {
        NSLog(@"is portrait");
    }else{
        NSLog(@"is horizontal");
    }
}

https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIInterfaceOrientation

https://developer.apple.com/library/ios/documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/c_ref/UIDeviceOrientation

查看更多
登录 后发表回答