UIDevice.orientation
的可能值包括UIDeviceOrientationFaceUp
和UIDeviceOrientationFaceDown
。虽然知道设备是扁平的可能是有用的,但这并不能告诉我们它是否是平面显示面向纵向或横向模式的界面。有没有办法在设备返回模糊信息的情况下找到GUI的当前方向?我想我可以跟踪方向变化事件以记住最后的纵向/横向方向或检查主要UIView的边界高度和宽度,但这似乎是kludgey。设备或UIView上是否有我失踪的财产?
答案 0 :(得分:95)
您可以通过3种方式获得定位:
UIInterfaceOrientation orientation = self.interfaceOrientation;
返回UIInterfaceOrientation,当前的方向
接口。它是UIViewController中的一个属性,您可以访问
这个仅在UIViewController类中。
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
返回UIInterfaceOrientation,当前的方向
应用程序的状态栏。您可以在任意位置访问该媒体资源
您的申请要点。我的经验表明,这是 最多
有效的方式 来检索真实的界面方向。
UIDeviceOrientation orientation = [[UIDevice currentDevice]
orientation];
返回 UIDeviceOrientation ,设备方向。
您可以在您的任何位置访问该媒体资源
应用即可。但请注意,UIDeviceOrientation并非总是如此
UIInterfaceOrientation。例如,当您的设备在平原上时
表可以获得意想不到的价值。
答案 1 :(得分:92)
在视图控制器中,您只需使用代码:
UIInterfaceOrientation interfaceOrientation = self.interfaceOrientation;
UIInterfaceOrientation是一个枚举:
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeLeft,
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;
答案 2 :(得分:14)
如果您只是关心设备是横向还是纵向,那么viewcontroller上有一些不错的便利方法:
UIDeviceOrientationIsLandscape(self.interfaceOrientation)
UIDeviceOrientationIsPortrait(self.interfaceOrientation)
答案 3 :(得分:11)
状态栏方向(statusBarOrientation)始终返回界面方向,即使状态栏已隐藏。
您可以在没有视图控制器的情况下使用状态栏方向。它为您提供当前的视图方向,而不是设备方向。
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
答案 4 :(得分:5)
我见过同样的情况。特别是在这个流程中:
此时,我看过的任何方向检查都会返回5的无效方向,因此无法直接确定是否应使用横向或纵向布局。 (我在每个方向上进行自定义布局定位,因此这是重要的信息)
在我的情况下,视图上的边界宽度检查用于确定事物的真实状态,但我很想知道其他人是否有不同的处理方式。
答案 5 :(得分:1)
这是您可能会觉得有用的代码片段:
UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation;
NSLog( @" ORIENTATION: %@", UIInterfaceOrientationIsLandscape( orientation ) ? @"LANDSCAPE" : @"PORTRAIT");