你不应该混淆UIDeviceOrientation和UIInterfaceOrientation,它们是不同的,但正如他们的声明所显示的那样
typedef enum {
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
UIDeviceOrientationPortraitUpsideDown,
UIDeviceOrientationLandscapeLeft,
UIDeviceOrientationLandscapeRight,
UIDeviceOrientationFaceUp,
UIDeviceOrientationFaceDown
} UIDeviceOrientation;
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft
} UIInterfaceOrientation;
UIDeviceOrientation 告诉您设备的方向。 UIInterfaceOrientation 告诉您界面的方向是什么,并由UIViewController 使用。 UIInterfaceOrientation 显然是纵向或横向,而 UIDeviceOrientation 可以有不明确的值(UIDeviceOrientationFaceUp、UIDeviceOrientationFaceDown、UIDeviceOrientationUnknown)。
在任何情况下,您都不应尝试使用[[UIDevice currentDevice] orientation] 来确定 UIViewController 的方向,因为无论设备方向是什么,UIViewController interfaceOrientation 属性都可能不同(例如,如果您的应用在所有[[UIDevice currentDevice] orientation] 都可以是UIDeviceOrientationLandscapeLeft 而viewController.interfaceOrientation 可以是UIInterfaceOrientationPortrait)。
更新:
从 iOS 8.0 开始,[UIViewController interfaceOrientation] 已弃用。 here 提供的另一种选择是 [[UIApplication sharedApplication] statusBarOrientation]。这也会返回UIInterfaceOrientation。